如何使用用户窗体按钮控件将时间戳链接到单元格



各位 VB 开发人员/用户/业余爱好者,大家好。你好吗?

我有一个有两个按钮的用户表单:

  1. 开始

当我按 Start 时,我希望它以特定列中dd/mm/yy hh:nn:ss格式记录当前时间。

然后,当我按下Stop按钮时,我希望它在旁边的单元格中再次记录时间。

然后,如果我再次按Start,我希望它记录在第一个单元格的当前记录下方。 基本上,我正在构建一个计时器来记录数据,以查看某些任务需要多长时间。

我将发布 excel 文件并在必要时提供更多信息。

感谢您提供的任何帮助。

当前代码

Public runTimer As Double
Public startTime As Date
Dim counter As Date
Sub setStart()
    counter = 0
    startTime = Now
    runTimer = Now + TimeSerial(0, 0, 1)
    Application.OnTime runTimer, "setStart", , True
    Set myTime = Sheet4.Range("F1")
    Set timeRng = Sheet4.Range("C8:C100")
    i = WorksheetFunction.CountA(timeRng)
    i = i + 1
    Cells(i, "C") = myTime
    Sheet4.Cells(i, "C").NumberFormat = "yyyy/mm/dd HH:mm:ss"
    If i >= 2 Then
        Cells(i, "D8") = Cells(i, "C8") - Cells(i - 1, "C8")
        Sheet4.Cells(i, "C").NumberFormat = "yyyy/mm/dd HH:mm:ss"
    End If
    Application.EnableEvents = False
End Sub
Sub setStop()
    Application.OnTime runTimer, "setStop", , True
    Set myTime = Sheet4.Range("F1")
    Set timeRng = Sheet4.Range("D8:D100")
    i = WorksheetFunction.CountA(timeRng)
    i = i + 1
    Application.EnableEvents = False
    Cells(i, "D") = myTime
    Sheet4.Cells(i, "D").NumberFormat = "yyyy/mm/dd HH:mm:ss"
End Sub

感谢您的反馈和建议。

这两个都很好用。 我仍然遇到将数据记录在代码中的特定工作表中的问题。 我不想使用当前的工作表。 我希望它是工作表1并在单元格" A8"而不是单元格" A2"中开始录制

谢谢。

我已经做了类似的事情来跟踪从Excel应用程序运行时SQL和MDX查询需要多长时间。用户对某件事需要多长时间(花了5分钟!)和实际发生的事情的感觉并不总是一致的。我需要知道某些事情需要多长时间来保护应用程序或了解我需要优化的内容。

我设置了一个工作表来模仿你的例子。第 1 行中的标题:

Start Time     Stop Time     Elapsed Time

我还有一个开始按钮和一个停止按钮。我setStart分配给开始按钮,setStop分配给停止按钮。

代码:

Option Explicit
Sub setStart()
    Dim NextRow As Long
    NextRow = GetLastRow("A") + 1
    With Range("a" & NextRow)
        .Value = Now
        .NumberFormat = "yyyy/mm/dd HH:mm:ss"
    End With
End Sub
Sub setStop()
    Dim NextRow As Long
    NextRow = GetLastRow("B") + 1
    With Range("b" & NextRow)
        .Value = Now
        .NumberFormat = "yyyy/mm/dd HH:mm:ss"
    End With
    calcElapsedTime (NextRow)
End Sub
Sub calcElapsedTime(NextRow As Long)
    With Range("c" & NextRow)
        .Formula = "=B" & NextRow & "-A" & NextRow
        .NumberFormat = "HH:mm:ss"
    End With
End Sub
Function GetLastRow(ColumnLetter As String) As Long
    GetLastRow = Range(ColumnLetter & ActiveSheet.Rows.Count).End(xlUp).Row
End Function

请注意,我没有检查启动和停止是否按正确的顺序完成。如果按 start 3 次,它将继续在开始列中添加没有匹配停止时间的值,这显然会破坏经过的时间。如果我提供的代码是你所追求的,则需要将这种逻辑添加到你的应用中。

我喜欢餐饮@Head答案的简单性。您可以将其稍微更改为单个按钮,以便只能根据需要启动或停止。

您可以对按钮文本以及视觉提醒进行颜色格式化。

只需添加几个并在命令按钮上运行启动计时器1

    Option Explicit
Sub startTimer()
If ActiveSheet.CommandButton1.Caption = "START" Then
        setStart
    Else
        setStop
    End If
End Sub
Sub setStart()
    Dim NextRow As Long
    NextRow = GetLastRow("A") + 1
    With Range("a" & NextRow)
        .Value = Now
        .NumberFormat = "yyyy/mm/dd HH:mm:ss"
    End With
   ActiveSheet.CommandButton1.Caption = "STOP"
End Sub
Sub setStop()
    Dim NextRow As Long
    NextRow = GetLastRow("B") + 1
    With Range("b" & NextRow)
        .Value = Now
        .NumberFormat = "yyyy/mm/dd HH:mm:ss"
    End With
    calcElapsedTime (NextRow)
    ActiveSheet.CommandButton1.Caption = "START"
End Sub
Sub calcElapsedTime(NextRow As Long)
    With Range("c" & NextRow)
        .Formula = "=B" & NextRow & "-A" & NextRow
        .NumberFormat = "HH:mm:ss"
    End With
End Sub
Function GetLastRow(ColumnLetter As String) As Long
    GetLastRow = Range(ColumnLetter & ActiveSheet.Rows.Count).End(xlUp).Row
End Function

最新更新