Timing Delays in VBA

后端 未结 12 2210
陌清茗
陌清茗 2020-11-28 13:48

I would like a 1 second delay in my code. Below is the code I am trying to make this delay. I think it polls the date and time off the operating system and waits until the

相关标签:
12条回答
  • 2020-11-28 14:12

    For MS Access: Launch a hidden form with Me.TimerInterval set and a Form_Timer event handler. Put your to-be-delayed code in the Form_Timer routine - exiting the routine after each execution.

    E.g.:

    Private Sub Form_Load()
        Me.TimerInterval = 30000 ' 30 sec
    End Sub
    
    Private Sub Form_Timer()
    
        Dim lngTimerInterval  As Long: lngTimerInterval = Me.TimerInterval
    
        Me.TimerInterval = 0
    
        '<Your Code goes here>
    
        Me.TimerInterval = lngTimerInterval
    End Sub
    

    "Your Code goes here" will be executed 30 seconds after the form is opened and 30 seconds after each subsequent execution.

    Close the hidden form when done.

    0 讨论(0)
  • 2020-11-28 14:17

    Another variant of Steve Mallorys answer, I specifically needed excel to run off and do stuff while waiting and 1 second was too long.

    'Wait for the specified number of milliseconds while processing the message pump
    'This allows excel to catch up on background operations
    Sub WaitFor(milliseconds As Single)
    
        Dim finish As Single
        Dim days As Integer
    
        'Timer is the number of seconds since midnight (as a single)
        finish = Timer + (milliseconds / 1000)
        'If we are near midnight (or specify a very long time!) then finish could be
        'greater than the maximum possible value of timer. Bring it down to sensible
        'levels and count the number of midnights
        While finish >= 86400
            finish = finish - 86400
            days = days + 1
        Wend
    
        Dim lastTime As Single
        lastTime = Timer
    
        'When we are on the correct day and the time is after the finish we can leave
        While days >= 0 And Timer < finish
            DoEvents
            'Timer should be always increasing except when it rolls over midnight
            'if it shrunk we've gone back in time or we're on a new day
            If Timer < lastTime Then
                days = days - 1
            End If
            lastTime = Timer
        Wend
    
    End Sub
    
    0 讨论(0)
  • 2020-11-28 14:19

    You can copy this in a module:

    Sub WaitFor(NumOfSeconds As Long)
    Dim SngSec as Long
    SngSec=Timer + NumOfSeconds
    
    Do while timer < sngsec
    DoEvents
    Loop
    
    End sub
    

    and whenever you want to apply the pause write:

    Call WaitFor(1)
    

    I hope that helps!

    0 讨论(0)
  • 2020-11-28 14:20

    Your code only creates a time without a date. If your assumption is correct that when it runs the application.wait the time actually already reached that time it will wait for 24 hours exactly. I also worry a bit about calling now() multiple times (could be different?) I would change the code to

     application.wait DateAdd("s", 1, Now)
    
    0 讨论(0)
  • 2020-11-28 14:23

    If you are in Excel VBA you can use the following.

    Application.Wait(Now + TimeValue("0:00:01"))
    

    (The time string should look like H:MM:SS.)

    0 讨论(0)
  • 2020-11-28 14:24

    With Due credits and thanks to Steve Mallroy.

    I had midnight issues in Word and the below code worked for me

    Public Function Pause(NumberOfSeconds As Variant)
     '   On Error GoTo Error_GoTo
    
        Dim PauseTime, Start
        Dim objWord As Word.Document
    
        'PauseTime = 10 ' Set duration in seconds
        PauseTime = NumberOfSeconds
        Start = Timer ' Set start time.
    
        If Start + PauseTime > 86399 Then 'playing safe hence 86399
    
        Start = 0
    
        Do While Timer > 1
            DoEvents ' Yield to other processes.
        Loop
    
        End If
    
        Do While Timer < Start + PauseTime
            DoEvents ' Yield to other processes.
        Loop
    
    End Function
    
    0 讨论(0)
提交回复
热议问题