2012-11-19 64 views
3

所以我需要在我的表單上顯示一個實時時鐘,但我不知道如何。我不知道這些代碼:VBA如何在用戶窗體中顯示實時時鐘?

TimeValue(Now) 

會給我當前的時間,但我不知道如何繼續我的表格上顯示這一點。

我有一個想法,就是把這個代碼在一個循環內,如下所示:

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

但是我不知道在哪裏可以把這個代碼。任何建議將不勝感激!

回答

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已更改爲我的用戶窗體上的相應標籤。

感謝您的所有幫助!

5

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()一次,例如,啓動循環。

+0

我不清楚爲什麼這不起作用,但它不更新標籤。 (順便說一句,你在'過程:=「DisplayCurrentTime」,''後缺少一個下劃線) – Brad

+0

@Brad謝謝,'_'是固定的。 - 它是否編譯?你是否設置了斷點/ Debug.Print調用來查看它在做什麼?你可以嘗試沒有'LatestTime'參數? DisplayFurrentTime()在您的UserForm模塊中是否公開?另外,請嘗試完全限定的方法名稱(即「MyProject.UserForm1.DisplayCurrentTime」)。 – Tomalak

+0

全部彙編。據我可以告訴它實際上並沒有設置定時器。當我運行它(在'Initialize'事件中調用'DisplayCurrentTime')時,沒有錯誤,但標籤只設置一次。如果我通過它,我得到的錯誤「宏可能無法在所有宏的工作簿中可用」可能會被禁用。該文件被保存爲xlsm。 – Brad

3

你的嘗試的問題是,你有效地創建一個無限循環。

您的Excel會佔用相當多的CPU時間,甚至可能會阻止用戶輸入,因爲它會盡可能快地超出while語句。

看看下面這個例子http://www.andypope.info/vba/clock.htm或在這個職位的解決方案How do I show a running clock in Excel?

他們應該幫助你。

至少你應該在你的循環中包含一個DoEvents語句。

相關問題