【问题标题】:How do I show a running clock in Excel?如何在 Excel 中显示正在运行的时钟?
【发布时间】:2012-08-08 14:52:23
【问题描述】:

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

从这个时钟开始,我会做进一步的计算,比如距离我上次做活动 X、Y 和 Z 有多久了。谢谢。

【问题讨论】:

  • 您可以使用 Application.OnTime 触发一个宏来刷新单元格中的时间。
  • 您可以使用 GetTickCount API 在 Excel 中显示时钟。我曾提出过一份这样的申请。让我来找你……
  • @jimmypena 这比我需要的要多。我实际上只需要一个单元格中的数字,不需要花哨的图形。我下载并检查了它。这很酷。
  • This answer 也很重要,可以很好地解释最佳实践和陷阱。

标签: excel vba


【解决方案1】:

找到了我在上面的评论中提到的code。要对其进行测试,请执行以下操作:

  1. Sheet1 中更改A1 的单元格高度和宽度,如下面的快照所示。
  2. 通过右键单击单元格来格式化单元格以显示时间格式
  3. 在工作表上添加两个按钮(表单控件)并按快照所示命名
  4. 将此代码粘贴到模块中
  5. 右键单击工作表上的Start Timer 按钮,然后单击Assign Macros。选择StartTimer 宏。
  6. 右键单击工作表上的End Timer 按钮,然后单击Assign Macros。选择EndTimer 宏。

现在点击Start Timer 按钮,您将在单元格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

快照

【讨论】:

  • 这是内置功能的一个非常简洁的替代方案。我不得不更改TimerSeconds = 1000 让它像问题所问的那样每分钟刷新一次,但我喜欢!非常有趣。
【解决方案2】:

查看以下代码 (taken from this post)

将此代码放入 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 设置为当前时间。

【讨论】:

    猜你喜欢
    • 2019-04-17
    • 2019-01-16
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多