VBA w Exce24.doc

(80 KB) Pobierz
VBA w Excelu - kurs dla początkujących

VBA w Excelu - kurs dla początkujących

Procedury zdarzeniowe arkusza

 

W czasie tego kursu spotkaliśmy się już z procedurami zdarzenia miedzy innymi na stronie Procedury opisującej typy procedur oraz stronie Zdarzenia na której przedstawiłem kilka zdarzeń i procedury zdarzenia. Na tej stronie przedstawiam procedury zdarzeniowe dla obiektu Worksheet czyli arkusza Excela. Procedury te pozwalają zaprogramować akcje wykonywane w przypadku zdarzeń zachodzących w arkuszu.

Tabela. Procedury zdarzeniowe arkusza

Nazwa procedury zdarzeniowej

Opis

Worksheet_Activate()

Wywoływana w momencie uaktywnienia arkusza.

Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)

Uruchamiana jest gdy użytkownik kliknie dwa razy na obszar arkusza. Argumentami tej procedury są Target i Cancel. Zmienna obiektowa Target reprezentuje klikniętą komórkę. Argument Cancel przekazuje informacje o anulowaniu zdarzenia. Jeżeli w procedurze nadasz parametrowi Cancel wartość True dalsze akcje związane z dwukrotnym kliknięciem nie będą wykonywane.

Worksheet_BeforeRightClick(ByVal Target As Excel.Range, Cancel As Boolean)

Procedura uruchamiana jest gdy użytkownik kliknie prawym przyciskiem myszy na obszar arkusza. Argumentami tej procedury są Target i Cancel. Zmienna obiektowa Target reprezentuje klikniętą komórkę. Jeżeli w procedurze nadasz parametrowi Cancel wartość True dalsze akcje związane z kliknięciem prawym przyciskiem myszy są anulowane.

Worksheet_Calculate()

Procedura wywoływana po przeliczeniu arkusza.

Worksheet_Change(ByVal Target As Excel.Range)

Procedura wywołana po zmianie zawartości dowolnej komórki arkusza. Procedura nie działa po zmianie spowodowanej przeliczeniem arkusza. Zmienna obiektowa Target reprezentuje komórkę w której dokonano zmiany.

Worksheet_Deactivate()

Uruchamiana gdy bieżący arkusz przestaje być aktywny, na przykład wtedy gdy użytkownik uaktywni inny arkusz.

Worksheet_FollowHyperlink(ByVal Target As Hyperlink)

Procedura wywoływana gdy użytkownik kliknie na link (hiperłącze) umieszczony na arkuszu. Argument Target to adres wskazany przez link. W starszych wersjach Excela procedura ta nie jest dostępna.

Worksheet_PivotTableUpdate(ByVal Target As PivotTable)

Procedura wykonywana jest po aktualizacji tabeli przestawnej. Zmienna obiektowa Target reprezentuje aktualizowany raport tabeli. W starszych wersjach Excela procedura ta nie jest dostępna.

Worksheet_SelectionChange(ByVal Target As Excel.Range)

Uruchamiana gdy zmieniamy obszar zaznaczenia na arkuszu (na przykład gdy przechodzimy do innej komórki). Zmienna obiektowa Target reprezentuj zaznaczoną komórkę lub zakres komórek. Jest to domyślna procedura dla arkusza.



Pisanie procedur zdarzenia:

Technika pisania procedury zdarzenia jest dość prosta (na poprzednich stronach spotkałeś się już z odpowiednimi krokami). Aby napisać procedurę zdarzenia dla arkusza wykonaj następujące czynności:

·         Uruchom Edytor Visual Basic.

·         Jeżeli nie jest widoczne, wyświetl okno Project (Eksplorator projektów), czyli z menu View (Widok) wybierz opcję ProjectExplorer (Eksploator projektu).

·         W oknie Project kliknij dwukrotnie na nazwę odpowiedniego arkusza, dla którego chcesz utworzyć procedurę zdarzenia. Powinno się otworzyć okno Code (Kod programu) tego arkusza.

·         W oknie Code (Kod programu) z listy rozwijanej Obiect (Obiekt) - lewa górna część okna, wybierz obiekt Worksheet (kliknij na grot strzałki a następnie nazwę Worksheet). Po wybraniu obiektu program Microsoft Excel automatycznie tworzy szablon domyślnej procedury zdarzenia, odpowiedni dla danego typu obiektu. Domyślnym zdarzeniem dla arkusza jest zdarzenie SelectionChange.

·         Możemy też wybrać inne zdarzenie niż domyślne z listy rozwijanej Procedure (Procedura) - prawa górna część okna Code (kliknij na grot strzałki a następnie nazwę odpowiedniej procedury zdarzenia). Pole (lista rozwijana) Procedure - pokazuje listę możliwych zdarzeń związanych z zaznaczonym obiektem w polu Obiect (patrz rysunek poniżej), w naszym przypadku jest to odpowiedni arkusz Excela. Po wybraniu jakiegoś zdarzenia zostanie utworzony odpowiedni szablon procedury zdarzenia.

Rozmiar: 32819 bajtów

·         W szablonie procedury zdarzenia wstaw kod który ma być wykonany.

Uwaga: jeżeli wybierzesz nazwę obiektu i nazwę zdarzenia z odpowiednich list okna Code, zostanie utworzony szablon procedury zdarzenia, a kursor będzie umieszczony między wierszem deklarującym procedurę a wierszem zamykającym ją. Jeżeli procedura zawiera już kod, zostanie ona po prostu otwarta.


Kilka prostych przykładów zastosowania:

Aby przetestować przykłady wykonaj kroki opisane powyżej a następnie wpisz odpowiedni fragment kodu z wybranego przykładu.

Przykład 1:

W przykładzie w momencie uaktywnienia arkusza wyświetlamy jest komunikat z informacją że w arkuszu przechowywane są ważne dane i nie należy ich modyfikować.

Kod przykładu:

Private Sub Worksheet_Activate()
 MsgBox "W arkuszu tym przechowywane są ważne dane, nie należy ich modyfikować", vbExclamation, "Autor"
End Sub


Przykład 2:

Poniższa procedura uniemożliwia użytkownikowi wywołanie menu podręcznego pod prawym przyciskiem myszy.

Kod przykładu:

Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, Cancel As Boolean)
 MsgBox "W tym akuszu menu pod prawym przyciskiem jest wyłączone"
 Cancel = True
End Sub


Przykład 3:

Jeżeli klikniemy dwa razy lewy przycisk myszy w kliknietej komórce pojawi się napis: Wykonano.

Kod przykładu:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
 Target.Value = "Wykonano"
End Sub


Przykład 4:

Jeżeli zmienimy wartość w komórce A1, będzie wyświetlona informacja o tym.

Kod przykładu:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
 If Target.Address = "$A$1" Then
  MsgBox "Nastąpiła zmiana wartości w komórce A1", , "Autor Dzono4"
 End If
End Sub


Przykład 5:

Za pomocą tego przykładu na pasku stanu wyświetlana jest informacja o numerze wiersza i numerze kolumny aktywnej komórki.

Kod przykładu:

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
  Application.StatusBar = "Wiersz " & Target.Row & " kolumna " & Target.Column

 

...
Zgłoś jeśli naruszono regulamin