【问题标题】:VBA how to display real time clock in a userform?VBA如何在用户窗体中显示实时时钟?
【发布时间】:2020-12-23 17:50:10
【问题描述】:

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

TimeValue(Now)

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

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

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

但是我不确定该代码应该放在哪里。任何建议将不胜感激!

【问题讨论】:

    标签: vba excel


    【解决方案1】:

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

    【讨论】:

    • 我不清楚为什么这不起作用,但它没有更新标签。 (顺便说一句,Procedure:="DisplayCurrentTime", 后面缺少下划线)
    • @Brad 谢谢,_ 已修复。 -- 可以编译吗?你是否设置了断点/Debug.Print 调用来查看它在做什么?您可以尝试不使用LatestTime 参数吗? DisplayCurrentTime() 在您的用户窗体模块中是公开的吗?另外,请尝试使用完全限定的方法名称(即"MyProject.UserForm1.DisplayCurrentTime")。
    • 一切都会编译。据我所知,它实际上并没有设置计时器。当我运行它时(Initialize 事件中调用了DisplayCurrentTime)没有错误,但标签只设置一次。如果我逐步完成它,我会收到错误The Macro may not be available in this workbook of all macros may be disabled。文件保存为 xlsm。
    • @Brad 见上文(另外,请尝试完全限定的方法名称(即"MyProject.UserForm1.DisplayCurrentTime") - 你这样做了吗?还有一些问题。
    • 是的,抱歉,我确实尝试了一个完全限定的名称。我也尝试将子公开。结果相同。
    【解决方案2】:

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

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

    查看此示例http://www.andypope.info/vba/clock.htm 或查看此帖子中的解决方案How do I show a running clock in Excel?

    他们应该会帮助你。

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

    【讨论】:

      【解决方案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 上的相应标签。

      【讨论】:

      • 我试过上面的代码;但是它给出了一个错误:“无法运行宏……宏可能在此工作簿中不可用”。我试图将潜艇设为公开,但仍然没有运气。我在 Public Sub UserForm_Activate() 中调用 DisplayCurrentTime()。请提出解决问题的建议。
      • @Mufaddal,尝试设置您要在模块中运行的宏并按名称调用/更新用户表单。所以 label1.caption 将类似于: Userform1.label1.caption = Time()
      猜你喜欢
      • 1970-01-01
      • 2017-05-08
      • 2017-06-15
      • 2019-03-13
      • 1970-01-01
      • 1970-01-01
      • 2019-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多