Możemy mieć zdarzenia skoroszytu (takie jak otwieranie, zamykanie itp.), które mogą być wyzwalaczami (przełącznikami) dla kodu VBA.
Aby postępować zgodnie z instrukcjami po otwarciu skoroszytu, przejdź do ThisWorkbook i wybierz Workbook:
Zdarzenie Workbook_Open zostanie dodane domyślnie i zostanie uruchomione po otwarciu skoroszytu:
Private Sub Workbook_Open() End Sub
Na przykład, jeśli dodamy następującą instrukcję, to po otwarciu skoroszytu wyświetli się okno dialogowe:
Private Sub Workbook_Open() MsgBox "Welcome" End Sub
Aby wykonać instrukcje przed zamknięciem skoroszytu, wybierz opcję Przed zamknięciem:
Private Sub Workbook_BeforeClose(Cancel As Boolean) End Sub
Zamknięcie skoroszytu można anulować, ustawiając zmienną „Canancel” na wartość True.
Poniżej znajduje się przykład, w którym użytkownik jest proszony o potwierdzenie zamknięcia skoroszytu:
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'Jeśli użytkownik odpowie NO, to zmienna Canancel będzie miała wartość TRUE (co anuluje zamknięcie skoroszytu) If MsgBox("Do you really want to close this workbook ?", 36, "I confirm") = vbNo Then Cancel = True End If End Sub
To zdarzenie ma miejsce bezpośrednio przed zapisaniem skoroszytu:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) End Sub
Zapisywanie pliku można anulować ustawiając zmienną „Canancel” na True.
To zdarzenie ma miejsce przed wydrukowaniem skoroszytu:
Private Sub Workbook_BeforePrint(Cancel As Boolean) End Sub
Drukowanie pliku można anulować ustawiając zmienną „Canancel” na True.
To zdarzenie następuje natychmiast po zapisaniu skoroszytu:
Private Sub Workbook_AfterSave(ByVal Success As Boolean) End Sub
To zdarzenie występuje za każdym razem, gdy przełączasz się między arkuszami w skoroszycie:
Private Sub Workbook_SheetActivate(ByVal Sh As Object) End Sub
W tym przykładzie nazwa aktywnego arkusza wyświetlana jest w oknie dialogowym:
Private Sub Workbook_SheetActivate(ByVal Sh As Object) MsgBox "Name of Sheet : " & Sh.Name End Sub
To zdarzenie występuje po dwukrotnym kliknięciu komórki arkusza:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) End Sub
Na przykład możemy użyć tego zdarzenia, aby dodać kolor wypełnienia komórki, w zależności od wybranego arkusza:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) If Sh.Name = "Sheet1" Then Target.Interior.Color = RGB(255, 108, 0) 'Pomarańczowy Else Target.Interior.Color = RGB(136, 255, 0) 'Zielony End If End Sub
To zdarzenie ma miejsce przed kliknięciem prawym przyciskiem myszy:
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) End Sub
To zdarzenie ma miejsce za każdym razem, gdy zmienia się zawartość arkusza:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) End Sub
To zdarzenie występuje za każdym razem, gdy dane w arkuszu są obliczane lub ponownie obliczane:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object) End Sub
To zdarzenie ma miejsce za każdym razem, gdy zmienia się zawartość wybranego zakresu komórek w arkuszu kalkulacyjnym:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) End Sub
W tym przykładzie kolor wypełnienia zmienia się, jeśli komórka A1 jest pusta:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If Range("A1") = "" Then Target.Interior.Color = RGB(124, 255, 255) 'Niebieski End If End Sub
To zdarzenie występuje za każdym razem, gdy do skoroszytu dodawany jest nowy arkusz:
Private Sub Workbook_NewSheet(ByVal Sh As Object) End Sub
To zdarzenie ma miejsce po kliknięciu łącza (hipertekstu):
Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) End Sub