Czasami chcemy, aby pewne operacje w Excelu wydarzyły się automatycznie, a dokładniej po określonym zdarzeniu obsługiwanych przez kod VBA, czyli po tzw. evencie.
Przykładowo za każdym razem, kiedy plik zostanie otwarty, chcemy wyświetlić komunikat powitalny. Gdy zmienimy wartość w komórce, chcesz dodać komentarz z informacją o dacie zmiany. Chcemy zablokować możliwość wydrukowania pliku. Te wszystkie sytuacje (eventy), i wiele innych, można obsłużyć za pomocą eventów.
Tworzenie przykładowego eventu otwarcia pliku
W tym artykule zajmiemy się przykładowymi eventami pliku i arkusza. Zacznijmy od informacji, gdzie możemy dodać kod, który obsłuży interesujące nas zdarzenia.
W pierwszej kolejności musimy otworzyć edytor VBA (skrót Alt + F11). Następnie musimy się upewnić, że jest włączony Project Explorer (Rysunek 1). Możemy go otworzyć z menu View (niezależnie od wersji językowej Excela edytor VBA jest po angielsku) albo za pomocą skrótu klawiszowego Ctrl + R.
Następnie w naszym przykładowym projekcie (pliku) musimy kliknąć dwa razy w Ten_skoroszyt. Spowoduje to otwarcie modułu z kodem dla danego pliku. W tym module chcemy rozwinąć listę po lewej stronie i wybrać element Workbook (Rysunek 2).
Spowoduje to automatyczne dodanie domyślnego kodu do obsługi eventu dla otwarcia pliku: Private Sub Workbook_Open(). Jeśli chcesz dodać obsługę innego eventu, wystarczy rozwinąć teraz listę po prawej stronie (Rysunek 3). Na lewej liście musi być wybrany Workbook.
Teraz możemy dodać precyzyjny kod w evencie otwarcia pliku. Zakładamy, że chcemy zapytać użytkownika o hasło administratora. Jeśli użytkownik poda prawidłowe hasło, arkusz z Panelem Administratora ma być widoczny, w przeciwnej sytuacji będzie mocno ukryty (nie będzie go można odkryć od strony Excela, a jedynie za pomocą odpowiedniego kodu albo edytując właściwości arkusza w Edytorze VBA).
Private Sub Workbook_Open()
Dim passwd As String
passwd = InputBox(Environ("Username") & " podaj hasło administratora")
If passwd = "hasło" Then
Worksheets("PanelAdministratora").Visible = xlSheetVisible
Else
Arkusz1.Visible = xlSheetVeryHidden
End If
End Sub
W tym kodzie użyliśmy odwołania do nazwy użytkownika (Environ("Username")) oraz na dwa różne sposoby odwołaliśmy się do arkusza PanelAdministratora. Pierwsze odwołanie korzysta z kolekcji Worksheets, czyli roboczych arkuszy. Potrzebuje ona nazwy zakładki arkusza do prawidłowej identyfikacji arkusza. Tę nazwę można łatwo zmienić od strony Excela. Dlatego w kodzie VBA częściej możesz zobaczyć odwołanie się do wewnętrznej nazwy arkusza, którą można edytować jedynie w Edytorze VBA. W naszym przykładzie nie zmieniliśmy domyślnej wewnętrznej nazwy, więc brzmi ona Arkusz1. Jeśli chciałbyś ją zmienić, musisz zaznaczyć konkretny arkusz w Project Explorerze, a następnie w Properties Window (skrót F4) zmienić właściwość (Name) (Rysunek 4).
Pamiętaj, że jeśli zmienisz nazwę zakładki arkusza w Excelu albo wewnętrzną nazwę arkusza, to będziesz musiał też ręcznie zmienić te nazwy w kodzie VBA, ponieważ nie zmienią się one automatycznie.
W powyższym kodzie zwróć też uwagę na przypisanie wartości do właściwości Visible. Nie są tu użyte konkretne liczby, ale stałe (xlSheetVisible i xlSheetVeryHidden). Jest to spowodowane tym, że nazwę stałej łatwiej zrozumieć człowiekowi (szczególnie jeśli zna język angielski), niż zapamiętać, że 2 oznacza arkusz bardzo ukryty. Z kolei wartość liczbową dużo łatwiej zrozumieć i obsłużyć systemowi.
Pozostałe 65% artykułu dostępne jest dla zalogowanych użytkowników serwisu.
Jeśli posiadasz aktywną prenumeratę przejdź do LOGOWANIA. Jeśli nie jesteś jeszcze naszym Czytelnikiem wybierz najkorzystniejszy WARIANT PRENUMERATY.
Zaloguj Zamów prenumeratę Kup dostęp do artykułuŹródło: Controlling i Rachunkowość Zarządcza nr 01/2025