如何在Excel中显示正在运行的时钟?

如何在Excel中显示正在运行的时钟?,excel,vba,Excel,Vba,我想展示Excel 2007单元格A1中的时钟。我熟悉NOW()和TODAY(),但它并不像我希望的那样每1分钟刷新一次。你知道,就像一个运行的时钟。我只希望h:mm中的当前时间在A1单元中。这可能吗 从这个时钟开始,我将做进一步的计算,比如我上次做活动X、Y和Z已经有多长时间了。非常感谢。参见下面的代码() 将此代码放入VBA的模块中(开发人员选项卡->Visual Basic) 您可以在工作簿打开时调用“StartTimer”函数,并通过在Visual Basic编辑器中的工作簿Visual

我想展示Excel 2007单元格A1中的时钟。我熟悉NOW()和TODAY(),但它并不像我希望的那样每1分钟刷新一次。你知道,就像一个运行的时钟。我只希望h:mm中的当前时间在A1单元中。这可能吗

从这个时钟开始,我将做进一步的计算,比如我上次做活动X、Y和Z已经有多长时间了。非常感谢。

参见下面的代码()

将此代码放入VBA的模块中(开发人员选项卡->Visual Basic)

您可以在工作簿打开时调用“StartTimer”函数,并通过在Visual Basic编辑器中的工作簿Visual Basic“This.workbook”类中添加以下代码,使其每分钟重复一次

Private Sub Workbook_Open()
    Module1.StartTimer
End Sub
现在,每过1分钟,就会调用计时器过程,并将单元格A1设置为当前时间。

找到了我在上面的评论中提到的时间。要测试它,请执行以下操作:

  • Sheet1
    中,更改say
    A1的单元格高度和宽度,如下面的快照所示
    
  • 通过右键单击单元格以显示时间格式来设置单元格格式
  • 在工作表上添加两个按钮(表单控件),并按快照所示命名
  • 将此代码粘贴到模块中
  • 右键单击工作表上的
    Start Timer
    按钮,然后单击
    Assign Macros
    。选择
    StartTimer
    macro
  • 右键单击工作表上的
    结束计时器
    按钮,然后单击
    分配宏
    。选择
    EndTimer
  • 现在单击启动计时器按钮,您将看到时间在单元格
    A1
    中得到更新。要停止时间更新,请单击结束计时器按钮

    代码(经过尝试和测试

    快照


    您可以使用Application.OnTime启动宏,刷新单元格中的时间。可能是这样的吗?您可以使用GetTickCount API在Excel中显示时钟。我曾经提出过这样的申请。让我来找你…@jimmypena这比我需要的多。我实际上只需要一个单元格中的数字,不需要花哨的图形。我下载并签出了它。那很酷。也是相关的,并且可以很好地解释最佳实践和陷阱。这是内置功能的一个非常好的替代方案。我不得不改变
    TimerSeconds=1000
    让它像问题所问的那样每分钟刷新一次,但我喜欢!非常有趣。
    Private Sub Workbook_Open()
        Module1.StartTimer
    End Sub
    
    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