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

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:
2 komentarze “Wstrzymanie odświeżania ekranu w Excel VBA”
Dzięki, działa
Fajna funkcja do ukrywania widoczności działania makra.
Ale chciałbym aby użytkownik wiedział, że program nadal działa a nie się zawiesił.
Czy można użyć jakiegoś okienka/funkcji/opcji/czegokolwiek, które by pokazywało, że program/makro nadal działa.
Jakiś komunikat: „Czekaj …”, albo kręcącę się słoneczko … czy coś w tym rodzaju.