excelvba自定义功能区显示时间(VBA设计一个电子表时间显示效果)

No.1

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

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

下图为例:

excelvba自定义功能区显示时间(VBA设计一个电子表时间显示效果)(1)

特点:

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

excelvba自定义功能区显示时间(VBA设计一个电子表时间显示效果)(2)

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

No.2

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

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

excelvba自定义功能区显示时间(VBA设计一个电子表时间显示效果)(3)

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

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

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

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

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

最终达到显示效果。

No.3

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

excelvba自定义功能区显示时间(VBA设计一个电子表时间显示效果)(4)

按钮代码

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

excelvba自定义功能区显示时间(VBA设计一个电子表时间显示效果)(5)

绘制数字过程:

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

excelvba自定义功能区显示时间(VBA设计一个电子表时间显示效果)(6)

设置隐藏部分:

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. 过程调用

欢迎关注、收藏

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页