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

Posted

技术标签:

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

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

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

【问题讨论】:

您可以使用 Application.OnTime 触发一个宏来刷新单元格中的时间。 可能是这样的? chandoo.org/wp/2012/07/05/masterchef-style-clock-in-excel 您可以使用 GetTickCount API 在 Excel 中显示时钟。我曾提出过一份这样的申请。让我来找你…… @jimmypena 这比我需要的要多。我实际上只需要一个单元格中的数字,不需要花哨的图形。我下载并检查了它。这很酷。 This answer 也很重要,可以很好地解释最佳实践和陷阱。 【参考方案1】:

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

    Sheet1 中更改A1 的单元格高度和宽度,如下面的快照所示。 通过右键单击单元格来格式化单元格以显示时间格式 在工作表上添加两个按钮(表单控件)并按快照所示命名 将此代码粘贴到模块中 右键单击工作表上的Start Timer 按钮,然后单击Assign Macros。选择StartTimer 宏。 右键单击工作表上的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 设置为当前时间。

【讨论】:

以上是关于如何在 Excel 中显示正在运行的时钟?的主要内容,如果未能解决你的问题,请参考以下文章

如何使数字时钟只显示小时和分钟

如何在颤动的后台运行时钟计时器?

如何像闹钟小部件(时钟应用程序)一样显示小部件?

如何防止 Heroku 时钟测功机睡在免费套餐上?

显示系统运行时钟 AIX

如何在应用程序运行之间本地检测用户的 iPhone 时钟提前?