przez:
admin
czytany 25880 razy.
Poniższy opis tyczy się procedur zdarzeniowych dla Excela2000.
Jeżeli otworzymy edytor VBA dla MS Excel, to zobaczymy kilka (w
zależności od ilości otwartych plików *.xls i ilości arkuszy w tych plikach)
modułów.
Po dwukrotnym kliknięciu na wybrany moduł (na początek niech to będzie
Arkusz1), pojawi się okienko, w którym można wpisywać kod. Nie byłoby w tym nic
ekscytującego, ale w tych modułach można wstawiać specjalne procedury, zwane
zdarzeniowymi. Uruchamiane one są wówczas automatycznie, gdy użytkownik
wykonuje jakieś operacje w Excelu. (np. otwieranie pliku, zapisywanie pliku,
zmiana aktywnego arkusza). Stwarza do doskonałą możliwość automatycznego
uruchamiania makr VBA, bez klikania w specjalne przyciski, czy paski narzędzi.
Pomimo, że jest tych procedur kilkanaście, nie trzeba pamiętać ich nazw i
argumentów. Jeżeli z listy rozwijalnej położonej z prawej strony ekranu
wybierzemy obiekt Worksheet, na liście położonej po stronie prawej pojawi się
spis dostępnych procedur zdarzeniowych dla tego obiektu (patrz rysunek).
Zdarzenia obiektu Worksheet (arkusz).
Obiekt Worksheet posiada następujące procedury
zdarzeniowe:
Worksheet_Activate()
Uruchamiana wówczas, gdy użytkownik uaktywni dany arkusz
Worksheet_Deactivate()
Uruchamiana wówczas, gdy bieżący arkusz przestaje być aktywny, np. wtedy, gdy
użytkownik uaktywni inny arkusz.
przykład użycia:
Private Sub Worksheet_Activate()
MsgBox "W tym arkuszu są przechowywane ważne dane." & _
vbCrLf & "Nie należy ich modyfikować!", vbExclamation
End Sub
Worksheet_BeforeDoubleClick(ByValTarget As Range, Cancel As Boolean)
Worksheet_BeforeRightClick(ByVal TargetAs Range, Cancel As Boolean)
Powyższe procedury są uruchamiane wówczas, gdy użytkownik kliknie dwa razy
(pierwsza procedura) lub kliknie prawym przyciskiem myszy (procedura druga) na
obszar okna arkusza.
Argumentami tych procedur są:
- Target - (argument przekazywany przez wartość) czyli komórka lub zakres
komórek, na który kliknął użytkownik.
- Cancel - (argument przekazywany przez referencje) - informacja o anulowaniu
zdarzenia.
przykłady użycia:
Pierwsza procedura zmienia kolor klikniętej komórki na żółty,
Po powtórnym kliknięciu wypełnienie jest usuwane.
Private Sub Worksheet_BeforeDoubleClick(ByVal
Target As Range, Cancel As Boolean)
With Target.Interior
If .ColorIndex = xlNone Then
.ColorIndex = 6 Else .ColorIndex = xlNone
End With
Cancel = True
End Sub
Poniższa procedura uniemożliwia użytkownikowi wywołanie menu
podręcznego (pod prawym przyciskiem myszy).
Private Sub Worksheet_BeforeRightClick(ByVal
Target As Range, Cancel As Boolean)
MsgBox "Żadnego klikania!"
Cancel = True
End Sub
Worksheet_Calculate()
Procedura wywoływana po przeliczeniu arkusza.
Worksheet_Change(ByVal Target As Range)
Wywołana po zmianie zawartości dowolnej komórki arkusza. Argumentem jest tutaj
adres zmienianej komórki (lub zakresu komórek).
Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Procedura wywoływana, gdy użytkownik kliknie na link umieszczone na arkuszu.
Argument Target to adres, wskazywany przez link.
Worksheet_SelectionChange(ByVal Target As Range)
Uruchomiana, gdy użytkownik zmienia obszar zaznaczenia na arkuszu.
przykład użycia:
Gdy użytkownik zmienia obszar zaznaczenia na arkuszu, na pasku stanu jest
wyświetlana informacja o ilo?ci wierszy i kolumn w zaznaczonym obszarze. Gdy
zaznaczona jest tylko jedna komórka, wyświetlany jest pusty ciąg.
Private Sub Worksheet_SelectionChange(ByVal
Target As Range)
With Target
If .Rows.Count <> 1 or
.Columns.Count <> 1 Then
Application.StatusBar = "Zaznaczenie: " &
.Rows.Count &" wiersze(y) i " _
& .Columns.Count & " kolumn(y)."
Else
Application.StatusBar = vbNullString
End If
End With
End Sub
Zdarzenia obiektu Workbook (skoroszyt).
Obiekt Workbook, reprezentujacy otwarty plik *.xls posiada następujące procedury zdarzeniowe:
Workbook_Activate()
Workbook_Deactivate()
Pierwsza procedura jest wywoływana w momencie uaktywnienia skoroszytu, a druga
wtedy, kiedy skoroszyt przestaje być aktywny (np. użytkownik uaktywnił inny
otwarty plik).
Workbook_AddinInstall()
Workbook_AddinUninstall()
Pierwsza procedura jest wywoływana w momencie gdy skoroszyt jest ładowany jako
Dodatek (patrz menu Narzędzia->Dodatki), druga gdy jest on wyładowywany.
Workbook_BeforeClose(Cancel As Boolean)
Procedura jest uruchamiana, gdy użytkownik próbuje zamknąć skoroszyt.
Workbook_BeforePrint(Cancel As Boolean)
Procedura jest uruchamiana, gdy użytkownik próbuje wydrukować skoroszyt. Dzięki
tej procedurze można zablokować drukowanie pliku *.xls
przykład:
Private Sub Workbook_BeforePrint(Cancel
As Boolean)
MsgBox "Nie można wydrukować tego pliku.", vbCritical
Cancel = True
End Sub
Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Uruchamiana w momencie próby zapisu skoroszytu.
Argument SaveAsUI będzie miał warto?ć TRUE jeżeli okno dialogowe Save As
będzie wyświetlone (np. podczas pierwszego zapisu pliku).
Dzięki tej procedurze można zabezpieczyć skoroszyt przed zapisaniem
niepożądanych zmian.
Workbook_NewSheet(ByVal Sh As Object)
Uruchamiana w momencie wstawienia do skoroszytu nowego arkusza.
Argument Sh, który jest zmienna obiektowa reprezentuje wstawiany arkusz.
przykład:
Do nazwy wstawianego arkusza dołączona będzie nazwa użytkownika.
Private Sub Workbook_NewSheet(ByVal
Sh As Object)
Sh.Name = Sh.Name & " (" & Application.UserName & ")"
End Sub
Workbook_Open()
Procedura uruchamiana w momencie otwarcia pliku.
Można ja wykorzystać do automatycznego uruchamiania makr.
przykład użycia:
poniższa procedurę należy umie?cić w module ThisWorkbook:
Private Sub Workbook_Open()
Call PokazEkran
End Sub
natomiast poniższa procedura może się znaleĄć w dowolnym miejscu projektu
(także w innym module).
W momencie otwarcia pliku wyświetlone zostanie okno komunikatu z pytaniem, czy
edytować otwarty skoroszyt.
Jeżeli użytkownik wybierze NIE, skoroszyt zostanie zamknięty.
Sub PokazEkran()
Dim ret As Variant
ret = MsgBox("Otworzyłe? plik " & ThisWorkbook.Name & "." & vbCr
& _
"Czy chcesz go edytować?", vbYesNo)
If ret = vbNo Then ThisWorkbook.Close
SaveChanges:=False
End Sub
Workbook_SheetActivate(ByVal Sh As Object)
Workbook_SheetDeactivate(ByVal Sh As Object)
Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Workbook_SheetBeforeRightClick(ByVal Sh As Object, Cancel ByVal Target As Range, Cancel As Boolean)
Workbook_SheetCalculate(ByVal Sh As Object)
Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink
Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal TargetAs Range)
Powyższe procedury są analogiczne do omówionych powyżej procedur dla obiektu
Worksheet (arkusza).
Występuje tu dodatkowy argument (Sh), identyfikujący arkusz. Należy
używać tych procedur, jeżeli chcemy dodawać lub usuwać arkusze ze skoroszytu.
Workbook_WindowActivate(ByVal Wn As Window)
Workbook_WindowDeactivate(ByVal Wn As Window)
Te procedury uruchamiane wówczas gdy uaktywnione/dezaktywowane jest okno
skoroszytu.
Argumentem jest tu zmienna obiektowa reprezentująca okno.
Workbook_WindowResize(ByVal Wn As Window)
Procedura jest uruchamiana, gdy użytkownik zmienia obszar okna skoroszytu.
Podobnie jak poprzednio argumentem jest tu zmienna obiektowa reprezentująca
zmieniane okno.
Opis powyższy należy uzupełnic jeszcze o procedury
Auto_Open()
Auto_Close()
Sa one dokładnymi odpowiednikami procedur zdarzenowych Workbook_Open()
i Workbook_Close(),
ale umieszczone one moga być we zwykłym module, a nie module Workbook.
wstecz