2012-08-08 62 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