Dla tych z nas, którzy głęboko wnikają w nasze myśli VB.NET, podróż z powrotem do VB6 może być mylącą podróżą. Korzystanie z timera w VB6 jest takie. Jednocześnie dodanie czasowych procesów do kodu nie jest oczywiste dla nowych użytkowników makr VBA.
Timery dla początkujących
Kodowanie makro programu Word VBA, które automatycznie mierzy czas testu napisanego w programie Word, jest typowym powodem używania timera. Innym częstym powodem jest sprawdzenie, ile czasu zajmują różne części kodu, abyś mógł pracować nad optymalizacją wolnych sekcji. Czasami możesz chcieć sprawdzić, czy coś się dzieje w aplikacji, gdy komputer wydaje się po prostu siedzieć bezczynnie, co może stanowić problem z bezpieczeństwem. Timery mogą to zrobić.
Uruchom licznik czasu
Timer uruchamia się, kodując instrukcję OnTime. To oświadczenie jest zaimplementowane w programach Word i Excel, ale ma różną składnię w zależności od tego, którego używasz. Składnia programu Word jest następująca:
wyrażenie. OnTime (kiedy, nazwa, tolerancja)
Składnia programu Excel wygląda następująco:
wyrażenie. OnTime (EarliestTime, Procedura, LatestTime, Harmonogram)
Oba mają wspólny pierwszy i drugi parametr. Drugi parametr to nazwa innego makra, które jest uruchamiane po osiągnięciu czasu w pierwszym parametrze. W efekcie kodowanie tej instrukcji przypomina tworzenie podprogramu zdarzenia w terminach VB6 lub VB.NET. Zdarzenie osiąga czas w pierwszym parametrze. Podprogram zdarzenia jest drugim parametrem.
Różni się to od sposobu kodowania w VB6 lub VB.NET. Po pierwsze, makro nazwane w drugim parametrze może znajdować się w dowolnym dostępnym kodzie. W dokumencie Word Microsoft zaleca umieszczenie go w szablonie Normalny dokument. Jeśli umieścisz go w innym module, Microsoft zaleca użycie pełnej ścieżki: Projekt. Moduł. Makro
Wyrażenie to zazwyczaj obiekt Application. Dokumentacja Word i Excel stwierdza, że trzeci parametr może anulować wykonanie makra zdarzenia, jeśli okno dialogowe lub inny proces uniemożliwia jego uruchomienie w określonym czasie. W programie Excel możesz zaplanować nowy czas na wypadek, gdyby tak się stało.
Kod Makra zdarzenia czasowego
Ten kod w programie Word jest przeznaczony dla administratora, który chce wyświetlić powiadomienie o upływie czasu testowania i wydrukować wynik testu.
Public Sub TestOnTime ()
Odpluskwić. Drukuj „Alarm włączy się za 10 sekund!”
Odpluskwić. Drukuj („Przed OnTime:” i teraz)
alertTime = Teraz + TimeValue („00:00:10”)
Podanie. OnTime alertTime, „EventMacro”
Odpluskwić. Drukuj („After OnTime:” i teraz)
Napis końcowy
Sub EventMacro ()
Odpluskwić. Drukuj („Wykonywanie makra zdarzenia:” i teraz)
Napis końcowy
Powoduje to wyświetlenie następującej treści w bezpośrednim oknie:
Alarm włączy się za 10 sekund!
Przed OnTime: 12/25/2000 7:41:23 PM
Po godzinie OnTime: 12/25/2000 7:41:23 PM
Wykonywanie makra zdarzenia: 27.02.2010 19:41:33
Opcja dla innych aplikacji Office
Inne aplikacje Office nie implementują OnTime. Dla nich masz kilka możliwości. Po pierwsze, możesz użyć funkcji Timer, która po prostu zwraca liczbę sekund od północy na twoim komputerze i wykonuje własną matematykę, lub możesz używać wywołań API Windows. Korzystanie z wywołań API Windows ma tę zaletę, że jest bardziej precyzyjne niż Timer. Oto procedura sugerowana przez Microsoft, która rozwiązuje ten problem:
Prywatna funkcja deklaracji getFrequency Lib "kernel32" _
Alias „QueryPerformanceFrequency” (cyFrequency As Currency) As Long
Funkcja prywatnego deklaracji getTickCount Lib „kernel32” _
Alias „QueryPerformanceCounter” (cyTickCount As Currency) As Long
Sub TestTimeAPICalls ()
Dim dTime As Double
dTime = MicroTimer
Dim StartTime jako Single
StartTime = Timer
Dla i = 1 do 10000000
Dim j As Double
j = Sqr (i)
Kolejny
Odpluskwić. Drukuj („Czas potrzebny na MicroTimer to:” i MicroTimer - dTime)
Napis końcowy
Funkcja MicroTimer () As Double
'
„Zwraca sekundy.
'
Dim cyTicks1 As Currency
Częstotliwość statyczna jako waluta
'
MicroTimer = 0
„Uzyskaj częstotliwość.
Jeśli cyFrequency = 0, to getFrequency cyFrequency
„Dostań kleszcze.
getTickCount cyTicks1
' Sekundy
Jeśli cyFrequency, to MicroTimer = cyTicks1 / cyFrequency
Funkcja zakończenia