各位 VB 开发人员/用户/业余爱好者,大家好。你好吗?
我有一个有两个按钮的用户表单:
- 开始
- 停
当我按 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