niedziela, 8 lipca 2012

Skrypt całkowicie blokuje interfejs aplikacji. Co zrobić?

Jeżeli napisałeś skrypt w VBA przetwarzający duże ilości danych i zauważyłeś, że w trakcie wykonywania blokuje główną aplikację, powinieneś wprowadzić do swojego kodu instrukcje przerywające jego wykonywanie. Poszukaj pętli która wykonuje się najdłużej i dodaj do niej instrukcję DoEvents. Przerywa ona wykonywanie programu i pozwala na wykonanie innych zadań oczekujących w kolejce. Potem wykonywana jest dalsza część skryptu.
Oczywiście, instrukcja DoEvents nie musi być wykonywana w każdej pętli. Wygodnie jest użyć następującego kodu:

If i Mod 200 = 0 Then
DoEvents
End If

Spowoduje on wykonanie instrukcji DoEvents co 200 pętli iteratora i.
Najczęściej użycia tej konstrukcji wymagają skrypty wykonujące się długo ze względu na dużą ilość tablic do przeszukania oraz skrypty generujące duże ilości nowych obiektów. Przykładem może być generowanie wielu stron dokumentacji w Visio - taki proces może wymagać nawet 8 godzin pracy skryptu przy generowaniu dokumentacji wielkości 2000 stron :)

Brak komentarzy:

Prześlij komentarz