我想在 Excel 2007 的单元格 A1 中显示一个时钟。我熟悉 NOW() 和 TODAY() 但它不会像我想要的那样每 1 分钟刷新一次。你知道,就像一个运行时钟。我只希望 h:mm 中的当前时间在单元格 A1 中。这可能吗?
从这个时钟开始,我将进行进一步的计算,例如自从我上次进行活动 X、Y 和 Z 以来已经过了多长时间。谢谢。
找到了我在上面的评论中提到的代码。要对其进行测试,请执行以下操作:
Sheet1
更改say的单元格高度和宽度,如A1
下面的快照所示。Start Timer
表上的按钮,然后单击Assign Macros
。选择StartTimer
宏。End Timer
表上的按钮,然后单击Assign Macros
。选择EndTimer
宏。现在单击Start Timer按钮,您将在 cell 中看到时间得到更新A1
。要停止时间更新,请单击结束计时器按钮。
代码
Public Declare Function SetTimer Lib "user32" ( _
ByVal HWnd As Long, ByVal nIDEvent As Long, _
ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user32" ( _
ByVal HWnd As Long, ByVal nIDEvent As Long) As Long
Public TimerID As Long, TimerSeconds As Single, tim As Boolean
Dim Counter As Long
'~~> Start Timer
Sub StartTimer()
'~~ Set the timer for 1 second
TimerSeconds = 1
TimerID = SetTimer(0&, 0&, TimerSeconds * 1000&, AddressOf TimerProc)
End Sub
'~~> End Timer
Sub EndTimer()
On Error Resume Next
KillTimer 0&, TimerID
End Sub
Sub TimerProc(ByVal HWnd As Long, ByVal uMsg As Long, _
ByVal nIDEvent As Long, ByVal dwTimer As Long)
'~~> Update value in Sheet 1
Sheet1.Range("A1").Value = Time
End Sub
快照
请参阅下面的代码(取自这篇文章)
将此代码放在 VBA 的模块中(开发人员选项卡 - > Visual Basic)
Dim TimerActive As Boolean
Sub StartTimer()
Start_Timer
End Sub
Private Sub Start_Timer()
TimerActive = True
Application.OnTime Now() + TimeValue("00:01:00"), "Timer"
End Sub
Private Sub Stop_Timer()
TimerActive = False
End Sub
Private Sub Timer()
If TimerActive Then
ActiveSheet.Cells(1, 1).Value = Time
Application.OnTime Now() + TimeValue("00:01:00"), "Timer"
End If
End Sub
您可以在工作簿打开时调用“StartTimer”函数,并通过在 Visual Basic 编辑器中将以下代码添加到您的工作簿 Visual Basic“This.Workbook”类中让它每分钟重复一次。
Private Sub Workbook_Open()
Module1.StartTimer
End Sub
现在,每经过 1 分钟,就会调用Timer程序,并将单元格 A1 设置为当前时间。