VBA-wacht- en slaapfuncties - VBA-code pauzeren / vertragen

Deze tutorial laat zien hoe je code kunt pauzeren / vertragen met behulp van de wacht- en slaapfuncties in VBA.

Wanneer we grote VBA-programma's maken die veel berekeningen uitvoeren, of misschien zelfs een extern programma aanroepen om uit te voeren, kunnen we eisen dat onze VBA-code voor een bepaalde tijd stopt met draaien terwijl het externe proces plaatsvindt. VBA heeft een aantal methoden beschikbaar om dit te bereiken.

Gebruik van Application.Wait-methode

Als we het uitvoeren van onze macro's enige tijd moeten pauzeren of totdat een bepaalde tijd is bereikt voordat we de volgende stap uitvoeren, kunnen we de Toepassing.Wachten methode. Dit kan bijvoorbeeld handig zijn als we een inlogproces op een website hebben geautomatiseerd en enkele seconden moeten wachten tot de pagina is geladen voordat onze macro blijft draaien.

Wacht 1 seconde

Als u deze regel hieronder in uw macro opneemt, wordt de uitvoering ervan ongeveer 1 seconde gepauzeerd:

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

Wacht totdat

In sommige gevallen moet u wachten tot een bepaald tijdstip. Met deze regel eronder zal je macro pas om 9 uur 's ochtends doorgaan:

1 Applicatie.Wacht "09:00:00"

Houd er rekening mee dat de Toepassing.Wachten accepteert geen vertragingen van minder dan 1 seconde.

VBA-programmering | Code Generator werkt voor u!

Gebruik van de slaapmethode

Als je een preciezere manier nodig hebt om je macro te pauzeren, kun je de slaapmethode gebruiken.

Slaap is een Windows API-functie, dat wil zeggen, het maakt geen deel uit van VBA. Het is toegankelijk via een speciale aangifteverklaring.

Als u de 64-bits versie van Microsoft Office gebruikt, kunt u de volgende instructie invoegen in een nieuwe module of aan het begin van de module (niet direct in de subroutine) waarin u de slaapfunctie wilt gebruiken:

1 Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal milliseconden als LongPtr)

Gebruik bij 32-bits versie deze regel:

1 Public Declare Sub Sleep Lib "kernel32" (byVal milliseconden als LongPtr)

Nadat je de slaapfunctie hebt gedeclareerd, heb je er als volgt toegang toe in je subroutines:

1 Slaap 10000

Met deze regel erboven wordt je macro 10.000 milliseconden gepauzeerd, d.w.z. 10 seconden.

Een lus gebruiken met Do Events

Het grote nadeel van het gebruik van de wacht- en slaapmethoden is dat de gebruiker niets kan doen in Excel terwijl hij wacht tot de macro doorgaat. Een gebruiker zou kunnen denken dat Excel niet meer reageert en terwijl de gebruiker dan kan gebruiken Ctl+Break om de macro te onderbreken, gaat dit voorbij aan het doel om om te beginnen een pauze in de macro te plaatsen.

Om dit probleem op te lossen, kunnen we een lus gebruiken met een methode genaamd DoEvents.

1234567 Openbare subtest()Dim ik zo langVoor ik = 1 tot 20000Bereik ("A1"). Waarde = iDoEventsvolgende iEinde sub

Terwijl Excel de bovenstaande macro uitvoert, kan de gebruiker blijven communiceren met Excel - we kunnen bijvoorbeeld tabbladen wijzigen of cellen opmaken - in feite blijft de macro actief, maar het Excel-scherm is niet bevroren. We zouden een vergelijkbare lus kunnen gebruiken om een ​​timerfunctie in Excel te maken en de DoEvents methode om het scherm te ontdooien terwijl de timer loopt.

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave