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

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

下图为例:


特点:

时间大小可以任意调整。

数字颜色可任意修改。

利用绘制Shape对象图形来达到构建数字效果。

时间调用当前电脑时间进行显示。


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

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

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


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

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

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

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

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

最终达到显示效果。

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


按钮代码

PrivateSubShowTime()DelDagit'清除Excel图形DimsAsWorksheetDimxRAsRange,RAsRangeSets=("Sheet3")SetxR=("A2:A8")''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''设置小时DimnAsInteger,HoHo=((Time),"0")n=(Mo)Fori=1TonSetTimeNumberxR,(Mo,i,1),i+3NextiSub


绘制数字过程:

PrivateSubSetTimeNumber(xRAsRange,nx,i)DimWx,HxWx=((1).Offset(0,4).Value)*2Hx=((1).Offset(0,3).Value)DimPobj()AsObjectErasePobjForEachRInxRReDimPreservePobj()SetPobj()=_(msoShapeRectangle,(0,2)+(i-1)*(Wx+Hx),(0,1),(0,4),(0,3))WithPobj().=RGB(10,12,22).Visible=True'.=(0,5)WithNextRIfnx11ThenSetVisiblePobj,nx'设置隐藏IfSub


设置隐藏部分:

PrivateSubSetVisible(Pobj,nx)DimsRAsRangeSetsR=("Sheet2").Range("A2:A11")DimvxAsVariant,sAsIntegers=0ForEachvxInPobjs=s+1=(nx+1).Offset(0,s)NextvxSub

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

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

总结:

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

字符截取函数:Mid(String,n,n)

时间函数:Time

小时函数:Hour(Time)

分钟函数:Minute(Time)

格式化函数:Format(String,"0#")

Shape对象AddShape()方法

(row,column)方法

过程调用