Ansprechen des aktuellen Tabellenblattes bzw. der aktuellen Arbeitsmappe

  • aktuelles Tabellenblatt – ActiveSheet
  • aktuelle Arbeitsmappe – ActiveWorkbook
  • Arbeitsmappe in der sich das Makro befindet – ThisWorkbook
  • Tabellenblatt in dem sich das Makro befindet – nicht vorhanden

Öffnen einer Arbeitsmappe

Beim Öffnen einer Arbeitsmappe gibt es zwei Befehle, die automatisch ausgeführt werden. Einerseits das Workbook_Open() und andererseits das Auto_open(), wobei das Workbook_Open() noch vor dem Auto_Open() ausgeführt wird. Nicht nur hinsichtlich der Reihenfolge, in der der Code ausgeführt wird, sondern auch wo die beiden gespeichert werden unterscheiden sie sich. Workbook_Open() muss in „Diese Arbeitsmappe“ gespeichert werden, Auto_Open() hingegen muss in einem Modul liegen. Es gibt noch einen weiteren Aspekt, den man erwähnen muss. Auto_Open() wird nur ausgelöst, wenn die Datei manuell geöffnet wird. Wird hingegen eine Datei mittels Code geöffnet, wird nur Workbook_Open ausgeführt.

Workbook_Open()

Private Sub Workbook_Open()  
'Code  
End Sub

Auto_Open()

Sub Auto_open()
'Code
End Sub

Schließen einer Arbeitsmappe

Vor dem Schließen wird das BeforeClose Event ausgelöst und auch das App_WorkbookBeforeClose Event. Beide müssen unter „DieseArbeitsmappe“ gespeichert werden.

Der Unterschied dabei ist, dass App_WorkbookBeforeClose beim Schließen jedes Workbooks anschlägt, obwohl es unter „DieseArbeitsmappe“ gespeichert wurde. Das hängt damit zusammen, dass App auf die gesamte Application gesetzt ist. Dies ist dann beispielsweise sinnvoll, wenn es in einem Add-In verwendet wird und so bei jedem Schließen einer Excel-Datei ausgelöst wird. Durch „if wb.Name = „ABC“ then“ kann man jedoch das Auslösen auf ein bestimmtes Workbook einschränken.

Workbook_BeforeClose(Cancel as Boolean)

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Code
End Sub

App_WorkbookBeforeClose(ByVal Wb as Worbook, Cancel as Boolean)

Dim WithEvents App As Application  
Private Sub Workbook_Open()
Set App = Application 
End Sub
Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
'Code
End Sub

Aktivieren eines Tabellenblattes

Beim Schließen eines Tabellenblattes können 2 verschiedene Prozeduren ausgeführt werden. Einerseits Workbook_SheetActivate und Worksheet_Activate. Die beiden unterscheiden sich insofern, da Workbook_SheetActivate bei jedem Tabellenblatt ausgelöst wird und daher auch unter „DieseArbeitsmappe“ gespeichert werden muss. WorksheetActivate() wird in dem jeweiligen Tabellenblatt gespeichert und löst nur dann aus, wenn diese eine Tabellenblatt geöffnet wird.

Workbook_SheetActivate(ByVal Sh As Object)

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'Code
End Sub

Worksheet_Activate()

Private Sub Worksheet_Activate()
'Code
End Sub

Verlassen eines Tabellenblattes

Wie beim Öffnen eines Tabellenblattes gibt es auch beim Schließen eines solchen 2 Ereignisse, die sich analog verhalten

Workbook_SheetDeactivate(ByVal Sh As Object)

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
'Code
End Sub

Worksheet_Deactivate()

Private Sub Worksheet_Deactivate()
'Code
End Sub

Wichtig: Beim Verlassen eines Tabellenblattes kann man nicht mehr über ActiveSheet auf das verlassene Tabellenblatt zugreifen. ActiveSheet verweist dann schon auf das neue Tabellenblatt.

Um beispielsweise den Namen des verlassenen Tabellenblattes zu ermitteln:

verlassenes Tabellenblatt

Private Sub Workbook_SheetDeActivate(ByVal Sh As Object)     
MsgBox Sh.Name
End Sub

Links