Podstawowa interakcja z użytkownikiem
Nic nie irytuje użytkowników makr bardziej, niż "martwy" ekran Excela podczas pracy makra i brak jakiejkolwiek informacji o tym co się dzieje: czy makro jeszcze pracuje, czy się już zawiesiło? Aby temu zaradzić przydałaby się choćby podstawowa komunikacja między komputerem (Excelem) a użytkownikiem.
Najbardziej podstawową czynnością, a zarazem najłatwiejszą i najszybszą jest zmiana kursora na znaną nam z innych aplikacji klepsydrę, a także poinformowanie użytkownika, że w danym czasie wykonywane jest makro.
Kursor możemy zmienić na pomocą instrukcji Application.Cursor = xlWait. Natomiast najprostszym i najszybszym sposobem na uproszczoną komunikację z użytkownikiem jest zmiana zawartości tzw. paska statusu (na dole Excela). Możemy tam umieścić dowolny tekst statyczny lub dynamiczny (o tekście dynamicznym, np. pasku postępu będziecie mogli poczytać w jednym z późniejszych postów). Tekst statyczny umieszczamy w następujący sposób: Application.StatusBar = "Nasz tekst". Oczywiście po wykonaniu wszystkich czynności musimy przywrócić zarówno standardowy kursor jak i wymazać nasz tekst z paska statusu.
Zatem w całości przykładowa struktura makra może wyglądać następująco (uwzględniająca również opisane w poście o przyspieszaniu wykonywania makra wyłączenie odświeżania ekranu):
Sub NaszeMakro() 'wyłączamy odświeżanie ekranu, zmieniamy kursor 'i wyświetlamy tekst "Czekaj…" With Application .ScreenUpdating = False .Cursor = xlWait .StatusBar = "Czekaj..." End With 'KOD NASZEGO MAKRA 'przywracamy standardowe wartości ekranu/kursora 'i paska statusu With Application .ScreenUpdating = True .Cursor = xlDefault .StatusBar = False End With End Sub
Konstrukcja With Application … End With powoduje, że nie musimy za każdym razem wpisywać słowa "Application", a kolejne linijki zaczynamy od znaku kropki i reszty instrukcji.
Dzięki temu prostemu - jak widzicie - zabiegowi Wasze makra będą szybsze (brak migotania) oraz będą wyglądać bardziej profesjonalnie (kursor w formie klepsydry sugerującej oczekiwanie oraz tekst na pasku statusu).
