Wstrzymanie odświeżania ekranu w Excel VBA

Excel - ScreenUpdating

Excel – ScreenUpdating

Często podczas wykonywania makra chcielibyśmy, by wykonywanie kodu nie było widoczne dla użytkownika. Z pomocą przychodzi nam funkcjonalność ScreenUpdating. Za pomocą tego polecenia możemy wstrzymać odświeżanie ekranu podczas wykonywania kodu VBA. Potencjalny użytkownik naszej aplikacji nie widzi żadnych zmian w aplikacji zbudowanej pod Excelem podczas wykonywania bloku kodu. By zobrazować to w prosty sposób stwórzmy w Excelu proste makro wypełniające 20 kolumn liczbami od 1 do 10000. Przykład makra zamieszczam poniżej:

Sub ScreenUpdatingExample()

Dim intCounter As Variant
Dim intColumn As Variant
Dim intRow As Variant

intColumn = 1

Do While intColumn <= 20
intRow = 1
intCounter = 1
Do While intCounter <= 10000
Cells(intRow, intColumn) = intCounter
intCounter = intCounter + 1
intRow = intRow + 1
Loop

intColumn = intColumn + 1
Loop

End Sub

 

Jak widzimy w toku wykonania programu widzimy na ekranie jak nasze makro się wykonuje. Jeśli nie chcemy, by było to widoczne, przed rozpoczęciem właściwego kodu wstawiamy blok  Application.ScreenUpdating = False. Analogiczny blok kodu z wartością True wstawiamy na końcu kodu programu. Wykonanie kodu po zastosowaniu wartości True będzie widoczne. W ten sposób możemy także tworzyć aplikacje, których wykonywanie kodu będzie widoczne tylko w określonych przez nas przypadkach. Sam schemat wygląda następująco:

Sub NazwaProgramu()

Application.ScreenUpdating = False

(kod makra do wykonania)

Application.ScreenUpdating = True

End Sub

Poniżej zamieszczam przykład z prawidłowo zastosowanym kodem. Jak widzimy, podczas wykonywania kodu widzimy od razu efekt końcowy:

Sub ScreenUpdatingExample()

Application.ScreenUpdating = False

Dim intCounter As Variant
Dim intColumn As Variant
Dim intRow As Variant

intColumn = 1

Do While intColumn <= 20
intRow = 1
intCounter = 1
Do While intCounter <= 10000
Cells(intRow, intColumn) = intCounter
intCounter = intCounter + 1
intRow = intRow + 1
Loop

intColumn = intColumn + 1
Loop

Application.ScreenUpdating = True

End Sub

Poniżej plik Excela z naszym programem:

Excel_vba_screenupdating

Dodaj komentarz

Twój adres email nie zostanie opublikowany.