Wstrzymanie odświeżania ekranu w Excel VBA

Brak odświeżania ekranu podczas działania makra VBA

Podczas wykonywania makra chcielibyśmy, by wykonywanie kodu nie było widoczne dla użytkownika. Z pomocą przychodzi nam funkcjonalność ScreenUpdating VBA. Za pomocą tego polecenia możemy wstrzymać odświeżanie ekranu podczas wykonywania kodu VBA. Użytkownik aplikacji nie widzi żadnych zmian podczas wykonywania bloku kodu. By przedstawić 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
ScreenUpdating VBA - Brak odświeżania ekranu
ScreenUpdating VBA – Brak odświeżania ekranu

Jak widzisz w toku wykonania programu makro uzupełnia wszystkie kolumny. Jeśli nie chcesz, by było to widoczne, przed rozpoczęciem właściwego kodu wstaw blok  Application.ScreenUpdating = False. Taki sam 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 ScreenUpdating VBA 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. 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

Podobne przykłady użycia kodu VBA zamieszczam w tym dziale. Link do strony Microsoft z opisem funkcjonalności. Poniżej plik Excela z naszym programem:

Excel_vba_screenupdating.xlsm

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

2 komentarze “Wstrzymanie odświeżania ekranu w Excel VBA”