我正在使用带有Userform的Excel文件来控制某些人完成一组任务所需的时间。
我有一个Userform在启动时打开,一旦你点击它上面的按钮,时间就开始计时了。但是,我真的不明白我该怎么做。
我需要计时器才能运行,直到任务完成,用户点击“退出”或“完成”,然后将时间保存到我的电子表格中。
答案 0 :(得分:0)
你可以适应这样的事情:
Sub CalculateRunTime_Minutes()
'PURPOSE: Determine how many minutes it took for code to completely run
'SOURCE: www.TheSpreadsheetGuru.com/the-code-vault
Dim StartTime As Double
Dim MinutesElapsed As String
'Remember time when macro starts
StartTime = Timer
'*****************************
'Insert Your Code Here...
'*****************************
'Determine how many seconds code took to run
MinutesElapsed = Format((Timer - StartTime) / 86400, "hh:mm:ss")
'Notify user in seconds
MsgBox "This code ran successfully in " & MinutesElapsed & " minutes", vbInformation
End Sub
满足您的需求。来源是here
您可以详细了解VBA的Timer
函数here
第二个选项是使用Now
function,它会为您提供当前时间。例如:
t = Now
.... run your tasks....
tfinal = Now
time_elapsed = tfinal - t
答案 1 :(得分:0)
我提出略有不同的方法。在userform中,声明变量:
Private startTime As Double
Private endTime As Double
Private blTime As Boolean
blTime是双倍,告诉应用程序时钟继续。然后在启动userform时设置startTime的值:
Private Sub UserForm_Initialize()
startime = Time
blTime = True
End Sub
我假设您的按钮完全控制命名为cbComplete。更改为按钮的真实姓名
Private Sub cbComplete_Click()
If blTime Then endTime = Time
blTime = False
End Sub
当用户点击按钮时,时钟关闭(blTime = False)。您也可以为其他按钮添加类似的代码,但只有第一次点击才有意义。 我们需要的是一种从表格中获取时间的方法。使用属性:
Property Get Timespan() As Double
If Not blTime Then
Timespan = endTime - startTime
Else
Timespan = 0
End Property
然后,在模块中,您可以使用命令UserForm1.Timespan。或者很好地格式化:
Format(UserForm1.Timespan, "hh:mm:dd")
重要提示:UserForm之前不能.Unload,只是。隐藏。