电子表如何调日期(Excel VBA设计一个电子表时间显示效果)

No.1

电子表是儿时的一个记忆,那个时候,为了戴上一个漂亮的电子表不知道有多么开心,儿时年幼时间并不是什么重要的东西,反正对时间也没有概念,主要是在同学面前伸出手腕那一瞬间的自豪才觉得无比喜悦。

为了回忆童年,也为了追忆逝去的时间,本节主要介绍一下,如何利用VBA来制作一个7位码时间显示效果。

下图为例:

电子表如何调日期(Excel VBA设计一个电子表时间显示效果)

特点:

  1. 时间大小可以任意调整。
  2. 数字颜色可任意修改。
  3. 利用绘制Shape对象图形来达到构建数字效果。
  4. 时间调用当前电脑时间进行显示。

电子表如何调日期(Excel VBA设计一个电子表时间显示效果)

上图为:图形对象参数设置表。

No.2

对于时间数字大小,可修改本表,以实现其显示的位置、大小以及颜色。

设计代码之初就为了可调节性进行了考虑,所以在不同的应用环境下,稍加修改得以使用。

电子表如何调日期(Excel VBA设计一个电子表时间显示效果)

上图为时间数字显示状态表,本表是固定格式,不能随意更改。

也就是说本表定义了两个状态,一个True,一个False。

True表示显示,False表示隐藏。

本例的显示逻辑为,在首先在Excel中绘制四个时间数字,即小时和分钟的时间数字。

然后提取当前系统时间,分别判断数字,对绘制的小时和分钟进行显示和隐藏属性设置。

最终达到显示效果。

No.3

下面看一下代码实现过程:

电子表如何调日期(Excel VBA设计一个电子表时间显示效果)

按钮代码

Private Sub ShowTime()
DelDagit'清除Excel图形
Dim s As Worksheet
Dim xR As Range, R As Range
Set s = ThisWorkbook.Worksheets("Sheet3")
Set xR = s.Range("A2:A8")
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 设置小时
Dim n As Integer, Ho
Ho = VBA.Format(VBA.Hour(Time), "0#")
n = VBA.Len(Ho)
For i = 1 To n
   SetTimeNumber xR, VBA.Mid(Ho, i, 1), i
Next i
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 绘制冒号
Dim dR As Range
Set dR = s.Range("A10:A11")
    SetTimeNumber dR, 11, 3
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 设置分钟
Dim m As Integer, Mo
Mo = VBA.Format(VBA.Minute(Time), "0#")
n = VBA.Len(Mo)
For i = 1 To n
   SetTimeNumber xR, VBA.Mid(Mo, i, 1), i   3
Next i
End Sub

电子表如何调日期(Excel VBA设计一个电子表时间显示效果)

绘制数字过程:

Private Sub SetTimeNumber(xR As Range, nx, i)
Dim Wx, Hx
Wx = VBA.Val(xR.Item(1).Offset(0, 4).Value) * 2
Hx = VBA.Val(xR.Item(1).Offset(0, 3).Value)
Dim Pobj() As Object
Erase Pobj
For Each R In xR
    ReDim Preserve Pobj(R.Row - 2)
    Set Pobj(R.Row - 2) = Me.Shapes.AddShape _
    (msoShapeRectangle, R.Offset(0, 2)   (i - 1) * (Wx   Hx), R.Offset(0, 1), R.Offset(0, 4), R.Offset(0, 3))
    With Pobj(R.Row - 2)
       .Fill.ForeColor.RGB = RGB(10, 12, 22)
       .Visible = True
      ' .Fill.ForeColor.SchemeColor = R.Offset(0, 5)
    End With
Next R
If nx <> 11 Then
    SetVisible Pobj, nx '设置隐藏
End If
End Sub

电子表如何调日期(Excel VBA设计一个电子表时间显示效果)

设置隐藏部分:

Private Sub SetVisible(Pobj, nx)
Dim sR As Range
Set sR = ThisWorkbook.Worksheets("Sheet2").Range("A2:A11")
                Dim vx As Variant, s As Integer
                s = 0
                For Each vx In Pobj
                    s = s   1
                    vx.Visible = sR.Item(nx   1).Offset(0, s)
                Next vx
End Sub

时间关系,没有做成动态显示,有兴趣的朋友可做一个试试。

其实,做这个的目的并没有什么意义,一个Time函数就可以实现时间显示,如果说意义的话,应该是可以提高一下逻辑能力。

总结:

本节编码过程中需要用到一些基础的内容知识:

  1. 字符截取函数:Mid(String,n,n)
  2. 时间函数:Time
  3. 小时函数:Hour(Time)
  4. 分钟函数:Minute(Time)
  5. 格式化函数:Format(String,"0#")
  6. Shape对象AddShape()方法
  7. Range.Offset(row,column)方法
  8. 过程调用

欢迎关注、收藏