Pause VBA Code From Running
VBA Pause is used to pause the code from executing it for a specified amount of time and to pause a code in VBA we use application.wait method.
When we build large VBA projects after performing something we may need to wait for some time to do other tasks. In such scenarios how do we pause the macro code to do our task? We can pause the VBA code for a specified time period by using two functions and those functions are “Wait” & “Sleep”.
How to Pause Code using Wait Method?
“Wait” is the function we use in VBA to hold the macro running for a specific amount of time. By applying this function we need to mention until what time our code should wait.
For example, if you are executing the code at 13:00:00 if you supply the time as “13:15:00” then it will hold the macro running for 15 minutes.
Now, look at the argument of WAIT function.
In time argument we need to mention at what time our code should pause or wait.
For example, look at the below VBA code.
Sub Pause_Example1() Range("A1").Value = "Hello" Range("A2").Value = "Welcome" Application.Wait ("13:15:00") Range("A3").Value = "To VBA" End Sub
Remember while running this code my system time is 13:00:00, as soon as I run the code it will execute the first two lines i.e.
Range("A1").Value = "Hello” & Range("A2").Value = "Welcome"
But if you look at the next line it says Application.Wait (“13:15:00”), so after executing those lines tasks my macro will be paused for 15 minutes i.e. from 13:00:00 it will wait until my system time reaches 13:15:01.
Once my system time reaches that time it will execute the remaining lines of code.
Range("A3").Value = "To VBA"
However, this is not the best way of practising the pause code, let’s say you are running the code at different times, then we need to use NOW VBA function with TIME VALUE function.
Now function returns the current date & time as per the system we are working on.
TIME Value function holds the time from 00:00:00 to 23:59:29.
Ok, assume we need to pause the code for 10 minutes whenever we run the code, then we can use the below code.
Sub Pause_Example1() Range("A1").Value = "Hello" Range("A2").Value = "Welcome" Application.Wait (Now() + TimeValue("00:00:10")) Range("A3").Value = "To VBA" End Sub
This is similar to previous code but the only difference is we have added NOW & TIME VALUE function.
Whenever we run this code it will hold or pause the execution for 10 minutes.
How to Pause the VBA Code using Sleep Method?
Sleep is a complicated function in VBA because it is not a built-in function. Since it is not a built-in in order to make it available to use we need to add the below code to the top of our module.
#If VBA7 Then Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'For 64 Bit Systems #Else Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #End If 'For 32 Bit Systems
You just have to copy the above code and paste it at the top of the module.
The reason why we need to add the above code because SLEEP is a VBA function presented in Windows DLL files, so we need to declare the nomenclature before we start the subprocedure.
Ok, let’s look at the example of SLEEP function now.
Sub Pause_Example2() Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox StartTime Sleep (10000) EndTime = Time MsgBox EndTime End Sub
First, we have declared two variables as String.
Dim StartTime As String Dim EndTime As String
Then we have assigned the TIME function to the StartTime variable. TIME function returns the current time as per system.
StartTime = Time
Then we have assigned the same to show in the message box.
Then I have applied SLEEP function as Sleep (10000).
Here 10000 is milliseconds which is equal to 10 seconds in VBA.
Then, at last, I have assigned the one more TIME function to the variable EndTime.
Now again I have written a code to show the time.
EndTime = Time
This will show the difference between start time and end time.
Now I will execute the code and see what the start time is.
When I execute the code my system time is 13:40:48 and now my code will sleep for 10 seconds. At the end, my time is as follows.
So, like this, we can pause the code from executing it for a specified amount of time.
This has been a guide to VBA Pause Method. Here we discuss how to pause code from running using SLEEP and WAIT function in Excel VBA with examples and downloadable excel sheet. You can learn more about VBA from the following articles –