2017-08-04 51 views
1

我使用thespreadsheetguru.com发现这个方法来计算的话需要运行一个宏时间:VBA定时器 - 减时间等待用户输入

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 

它完美的我,但在我代码,用户输入有多个提示。有些只是OK按钮,其他的则是带有多个按钮的用户表单。

如何计算运行宏所需的时间减去等待用户点击按钮的时间?

+1

*用户输入的多个提示* - 摆脱这些提示并收集用户输入,例如为用户输入创建带有手动单元格输入的初始表。如果需要输入中间代码,请在每个启动页面之前创建多个启动点并结束代码,并按此方式跟踪时间。 - >我的评论需要一点回合bc我觉得在代码中的多个用户提示是糟糕的用户体验设计。 –

回答

1

基于您的代码是这样的:

Sub CalculateRunTime_Minutes() 
Dim StartTime1 As Double, StartTime2 As Double, StartTime3 As Double 
Dim StopTime1 As Double, StopTime2 As Double 
Dim MinutesElapsed As String 

StartTime1 = Timer 
'your code 
StopTime1 = Timer 
'user input1 

StartTime2 = Timer 
'your code 
StopTime2 = Timer 
'user input2 

StartTime3 = Timer 
'your code 
MinutesElapsed = Format(((Timer - StartTime3) + (StopTime2 - StartTime2) + (StopTime1 - StartTime1))/86400, "hh:mm:ss") 

MsgBox "This code ran successfully in " & MinutesElapsed & " minutes", vbInformation 

End Sub 
+0

我正在考虑尝试这样的事情,但我希望有一个更简单的方法。 – Robby

1

可以实现某种PauseTime的检查?

我VBA很远,但...

Dim arrayPausetime() as double 
Dim formStartTime as double 
Dim formStopTime as double. 

每当你启动你需要用户输入的形式,你带时间戳formStartTime,同样当你走出这种形式...... formStopTime的。

附加(formStopTime - formStartTime)到您的arrayPausetime,并在您的宏的结尾:

dim finalTime as double 

for each (double pausetime in arrayPausetime) 
    finalTime = finalTime + (Timer - StartTime) - pausetime 

希望它可以帮助头脑风暴! :)