TOP

VBA-Lekcja 11.1. Zdarzenia skoroszytu (zdarzenia Workbook)

Możemy mieć zdarzenia skoroszytu (takie jak otwieranie, zamykanie itp.), które mogą być wyzwalaczami (przełącznikami) dla kodu VBA.


Workbook_Open (Otwieranie książki)

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

Workbook_BeforeClose (Zdarzenie przed zamknięciem skoroszytu)

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

Workbook_BeforeSave (Zdarzenie przed zapisaniem skoroszytu)

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.

Workbook_BeforePrint (Zdarzenie przed wydrukowaniem książki)

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.

Workbook_AfterSave (Zdarzenie po zapisaniu skoroszytu)

To zdarzenie następuje natychmiast po zapisaniu skoroszytu:

Private Sub Workbook_AfterSave(ByVal Success As Boolean)

End Sub

Workbook_SheetActivate (zdarzenie przełączenia arkusza)

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

Workbook_SheetBeforeDoubleClick (zdarzenie dwukrotnego kliknięcia komórki)

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

Workbook_SheetBeforeRightClick (zdarzenie przed kliknięciem prawym przyciskiem myszy)

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

Workbook_SheetChange (zdarzenie zmiany zawartości arkusza)

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

Workbook_SheetCalculate (zdarzenie SheetCalculate)

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

Workbook_SheetSelectionChange (zdarzenie zmiany zakresu wybranych komórek)

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

Workbook_NewSheet (Zdarzenie Dodaj nowy arkusz)

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

Workbook_SheetFollowHyperlink (zdarzenie kliknięcia łącza)

To zdarzenie ma miejsce po kliknięciu łącza (hipertekstu):

Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)

End Sub