Ajastimen käyttäminen MS Office VBA -makroissa

Niille meistä, jotka ajattelevat syvällisesti VB.NET, matka takaisin VB6 voi olla hämmentävä matka. Ajastimen käyttäminen VB6: ssa on sellaista. Samanaikaisesti ajoitettujen prosessien lisääminen koodiin ei ole itsestään selvää VBA-makrojen uusille käyttäjille.

Ajastimet aloittelijoille

Coding Word VBA -makro, joka ajoittaa Wordiin kirjoitetun testin automaattisesti, on tyypillinen syy ajastimen käyttämiseen. Toinen yleinen syy on nähdä, kuinka paljon aikaa koodin eri osat vievät, jotta voit työskennellä hidasten osien optimoinnissa. Joskus haluat ehkä nähdä, tapahtuuko sovelluksessa jotain, kun tietokone näyttää vain istuvan siellä tyhjäkäynnillä, mikä voi olla tietoturvaongelma. Ajastimet voivat tehdä sen.

Käynnistä ajastin

Voit käynnistää ajastimen koodaamalla OnTime-käskyn. Tämä lause on toteutettu Wordissa ja Excelissä, mutta sillä on erilainen syntaksi käyttämästäsi riippuen. Wordin syntaksi on:

ilmaisu. OnTime (milloin, nimi, suvaitsevaisuus)

Excelin syntaksi näyttää tältä:

ilmaisu. OnTime (aikaisin aika, menettely, viimeisin aika, aikataulu)

instagram viewer

Molemmilla on yhteinen ensimmäinen ja toinen parametri. Toinen parametri on toisen makron nimi, joka suoritetaan, kun ensimmäisen parametrin aika saavutetaan. Itse asiassa tämän lauseen koodaaminen on kuin tapahtuman aliohjelman luominen VB6- tai VB.NET-termillä. Tapahtuma saavuttaa ajan ensimmäisessä parametrissa. Tapahtuman aliohjelma on toinen parametri.

Tämä eroaa tavasta, jolla se koodataan VB6: ssa tai VB.NET: ssä. Yhtäältä, toisessa parametrissa nimetty makro voi olla missä tahansa koodissa, johon pääsee. Microsoft suosittelee Word-asiakirjassa, että se asetetaan Normaali-asiakirjamalliin. Jos laitat sen toiseen moduuliin, Microsoft suosittelee koko polun käyttöä: Projekti. Moduuli. Makro.

Lauseke on yleensä sovellusobjekti. Word- ja Excel-dokumentaatiossa todetaan, että kolmas parametri voi peruuttaa tapahtumamakron suorituksen, jos valintaikkuna tai jokin muu prosessi estää sitä toimimasta tietyn ajan. Excelissä voit ajoittaa uuden ajan, jos niin tapahtuu.

Koodaa aikatapahtuma-makro

Tämä Word-koodi on järjestelmänvalvojalle, joka haluaa näyttää ilmoituksen testausajan päättymisestä ja tulostaa testituloksen.

Julkinen alatesttiOnTime ()
Debug. Tulosta "Hälytys sammuu 10 sekunnissa!"
Debug. Tulosta ("Ennen onTimea:" ja nyt)
alertTime = Nyt + TimeValue ("00:00:10")
Sovellus. OnTime alertTime, "EventMacro"
Debug. Tulosta ("OnTimen jälkeen:" ja nyt)
End Sub
Sub EventMacro ()
Debug. Tulosta ("Tapahtumamakron suorittaminen:" ja nyt)
End Sub

Tästä seuraa seuraava sisältö välittömässä ikkunassa:

Hälytys sammuu 10 sekunnissa!
Ennen OnTimea: 25.12.2000 7:41:23 PM
OnTime-ajan jälkeen: 25.12.2000 7:41:23 PM
Tapahtumamakron suorittaminen: 27.2.2010 7:41:33 PM

Vaihtoehto muille Office-sovelluksille

Muut Office-sovellukset eivät ota käyttöön OnTimea. Niille sinulla on useita vaihtoehtoja. Ensinnäkin, voit käyttää Ajastintoimintoa, joka yksinkertaisesti palauttaa sekuntien lukumäärän tietokoneen keskiyöstä lähtien ja tekee oman matematiikan tai voit käyttää Windows API -puhelut. Windows API -puhelujen käytön etuna on, että se on tarkempi kuin ajastin. Tässä on Microsoftin ehdottama rutiini, joka tekee tempun:

Yksityinen ilmoitustoiminto getFrequency Lib "kernel32" _
Alias ​​"QueryPerformanceFrequency" (cyFrequency valuuttana) niin kauan
Yksityinen ilmoitustoiminto getTickCount Lib "kernel32" _
Alias ​​"QueryPerformanceCounter" (cyTickCount valuuttana) niin kauan
Sub TestTimeAPICalls ()
Himmennä dTime kaksinkertaisena
dTime = MicroTimer
Dim StartTime Single
StartTime = Ajastin
Jos i = 1 10000000
Dim j Kuten kaksinkertainen
j = Sqr (i)
Seuraava
Debug. Tulosta ("MicroTimer Käytetty aika oli:" & MicroTimer - dTime)
End Sub
Toiminto MicroTimer () kaksinkertaisena
'
'Palauttaa sekunnit.
'
Dim cyTicks1 valuuttana
Staattinen cyFrequency valuuttana
'
MicroTimer = 0
'Hanki taajuus.
Jos cyFrequency = 0 Sitten getFrequency cyFrequency
Hanki punkkeja.
getTickCount cyTicks1
'Sekuntia
Jos cyFrequency Sitten MicroTimer = cyTicks1 / cyFrequency
Lopeta toiminto