2012-08-08 61 views
2

我想在Excel 2007的單元格A1中顯示一個時鐘。我熟悉NOW()和TODAY(),但它並不像我想要的那樣每1分鐘刷新一次。你知道,就像跑步時鐘一樣。我只想將當前時間以h:mm爲單位格A1。這可能嗎?如何在Excel中顯示運行時鐘?

從這個時鐘我會做進一步的計算,比如自從我上次做了多長時間以來,活動X,Y和Z.感謝所以。

+0

您可以使用Application.OnTime火刷新其在細胞的時間的宏。 – 2012-08-08 14:58:48

+0

也許這樣的事情? http://chandoo.org/wp/2012/07/05/masterchef-style-clock-in-excel/ – JimmyPena 2012-08-08 15:02:23

+0

您可以使用GetTickCount API在Excel中顯示時鐘。我做了一個這樣的應用程序。讓我搜索你... – 2012-08-08 15:03:24

回答

5

請參見下面的代碼(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分鐘時間經過定時器程序將被調用,並設置單元格A1等於當前時間。

4

找到我在上面評論中提到的code。爲了測試它,這樣做:

  1. Sheet1變化的細胞的高度和寬度的說A1如示於下面的快照。
  2. 格式通過右鍵單擊單元格以顯示時間格式
  3. 在工作表上添加兩個按鈕(窗體控件),並將其命名爲顯示在快照
  4. 模塊
  5. 右鍵點擊這個代碼粘貼在表格上的Start Timer按鈕上,然後單擊Assign Macros。選擇StartTimer宏。
  6. 右鍵單擊工作表上的End Timer按鈕,然後單擊Assign Macros。選擇EndTimer宏。

現在點擊啓動計時器按鈕,你會看到在小區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 

快照

enter image description here

+0

這是內置功能的完美替代方案。我不得不改變'TimerSeconds = 1000'讓它像問題一樣每分鐘刷新一次,但我喜歡!很有意思。 – Sam 2012-08-08 16:56:20