3

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

TimeValue(Now)

会给我当前时间,但我不确定如何在我的表单上持续显示。

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

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

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

4

3 回答 3

6

Excel 具有允许您安排执行任何过程的方法OnTime

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

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(),例如在表单的初始化方法中。

于 2012-11-19T08:43:18.893 回答
4

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

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

查看此示例http://www.andypope.info/vba/clock.htm或查看这篇文章中的解决方案如何在 Excel 中显示正在运行的时钟?

他们应该帮助你。

至少您应该DoEvents在循环中包含一个语句。

于 2012-11-19T08:43:47.863 回答
3

我解决了其他人在所选答案中使用给定代码遇到的问题。我删除了该latesttime行并改为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已更改为我的userform.

于 2012-11-29T11:05:38.510 回答