VBA如何在用户窗体中显示实时时钟?

时间:2012-11-19 08:02:01

标签: excel vba excel-vba

所以我需要在表单上显示一个实时时钟,但我不确定如何。我知道代码:

TimeValue(Now)

会给我当前的时间,但我不知道如何在我的表单上不断显示它。

我有一个想法是将此代码放在循环中,如下所示:

Dim bool As Boolean
bool = True
Do While bool = True
    Label1.Caption = TimeValue(Now)
Loop

但是我不知道在哪里放这个代码。任何建议将不胜感激!

3 个答案:

答案 0 :(得分:6)

Excel有the OnTime method,允许您安排执行任何程序。

只需用它来安排一秒钟的节奏。

Sub DisplayCurrentTime()
  Dim nextSecond As Date

  nextSecond = DateAdd("s", 1, Now())

  Label1.Caption = Now()

  Application.OnTime _
    Procedure:="DisplayCurrentTime", _
    EarliestTime:=nextSecond, _
    LatestTime:=nextSecond
End Sub

通过调用DisplayCurrentTime()一次启动循环,例如在表单的initialize方法中。

答案 1 :(得分:4)

你的尝试的问题是,你实际上是在创造一个无限循环。

您的Excel会耗尽相当多的CPU时间,甚至可能会阻止用户输入,因为它会尽可能快地执行您的while语句。

请查看此示例http://www.andypope.info/vba/clock.htm或此帖How do I show a running clock in Excel?

中的解决方案

他们应该帮助你。

至少你应该在循环中包含DoEvents语句。

答案 2 :(得分:2)

我解决了其他人在所选答案中使用给定代码所遇到的问题。我删除了最新时间线,我更改了Label1.caption = Now()以改为使用Time()。

Sub DisplayCurrentTime()
    Dim nextSecond As Date

    nextSecond = DateAdd("s", 1, Now())

    Label1.Caption = Time()

    Application.OnTime _
        Procedure:="DisplayCurrentTime", _
        EarliestTime:=nextSecond
End Sub

然后我在userform_initialize函数中调用了它。 Label1.caption已更改为我的用户表单上的相应标签。

感谢所有帮助!!