视频加载中...

VBA中OnTime函数可在指定的时间点运行指定函数或过程。其指定的时间其最小单位为1秒。利用这些信息,我们可以以1秒为频率刷新指定单元格的时间数据让其显示当前时间,由此达成单元格显示含秒的完整时间变化之效果(如上方视频展示)。

Step1. 准备

时间显示:选定A1单元格以1秒为单位动态更新并显示当前时间。

激活与停止:随机点击任意单元格激活时间更新显示,再次随机点击任意单元格停止时间更新。

Step2. 代码的添加

Alt+F11调出VBE界面,在左侧对象列表中随机点选一个对象(如“ThisWorkbook”)并右键选“插入”->“模块”

2-1. 在模块中自定义两个函数(如下分别为“OnTimeFunc”和“RunTime”),分别用于OnTime函数调用及A1单元格时间更新

OnTimeFunc自定义过程中的OnTime及其参数含义:从程序执行到Application.OnTime时刻起1秒种后自动调用RunTime函数。因RunTime函数会将当前时间赋值给A1单元格并回调OnTimeFunc,故整个程序由此进入两函数相互调用的循环模式进而导致每秒钟A1单元格时间数据自动更新。

OnTimeFunc中的Now代表当前时间,即程序执行到OnTime时的系统时间。TimeSerial为时间函数其中的参数分别为小时、分钟、秒;只有秒被赋值1,小时分钟均为0,其值为1秒;此处也可用TimeValue("00:00:01")来代表时间1秒。

OnTimeFunc函数被设计为带一个默认True的布尔参数,其作用用于控制OnTime中RunTime过程的执行,当此参数为false,则RunTime不再执行,A1单元格的时间数据更新也将停止。

2-2. 双击①Sheet1对象,在代码区点选②Worksheet及③SelectionChange,并在调出的过程内外分别添加红色框所示代码:

布尔变量f_Run为启动或停止A1单元格时间数据更新的开关。

每次点击任意单元格将进入Worksheet_SelectionChange过程,f_Run = Not f_Run将会使每次点击后的f_Run开关状态反转。

Call OnTimeFunc(f_Run)调用模块1中的OnTimeFunc过程,同时将开关量f_Run传入,由其值决定是否停止OnTime中所指定的RunTime的执行。

2-3. 整个程序运行逻辑如下:点击任意单元格启动程序,主程序由红色实线箭头进入模块1,并进入绿色箭头所示的由两个过程相互调用所形成的“循环圈”中,因布尔量f_Run初始默认值为false,故第一次传入OnTimeFunc的值为True,模块1中的OnTime函数f参数也为True,所以A1单元格持续时间更新。再次点击,OnTimeFunc中的布尔值变为False,OnTime中的布尔量f也变为Fasle,RunTime过程被停止,A1单元格停止更新。

Step3. 代码的执行

返回前台sheet界面,随机点选单元格即可开启A1单元格时间更新,再次随机点选单元格A1单元格时间停止更新。