Eventy arkusza i skoroszytu
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.
Wykorzystałeś swój limit bezpłatnych treści
Pozostałe 65% artykułu dostępne jest dla zalogowanych użytkowników portalu. Zaloguj się, wybierz plan abonamentowy albo kup dostęp do artykułu/dokumentu.