在两次按钮点击之间设置一个计时器

时间:2017-12-14 12:05:57

标签: vba excel-vba excel

我正在使用带有Userform的Excel文件来控制某些人完成一组任务所需的时间。

我有一个Userform在启动时打开,一旦你点击它上面的按钮,时间就开始计时了。但是,我真的不明白我该怎么做。

我需要计时器才能运行,直到任务完成,用户点击“退出”或“完成”,然后将时间保存到我的电子表格中。

2 个答案:

答案 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,只是。隐藏。