Gepostet am: Nov 16, 2012 5:50:47 PM
Ansprechen des aktuellen Tabellenblattes bzw. der aktuellen 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()'CodeEnd Sub
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
Private Sub Workbook_BeforeClose(Cancel As Boolean)'CodeEnd Sub
App_WorkbookBeforeClose
Dim WithEvents App As Application Private Sub Workbook_Open()Set App = Application End SubPrivate Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, _ Cancel As Boolean)'CodeEnd Sub
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
Private Sub Workbook_SheetActivate(ByVal Sh As Object)'CodeEnd Sub
Worksheet_Activate
Private Sub Worksheet_Activate()'CodeEnd Sub
Wie beim Öffnen eines Tabellenblattes gibt es auch beim Schließen eines solchen 2 Ereignisse, die sich analog verhalten
Workbook_SheetDeactivate
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)' CodeEnd Sub
Worksheet_Deactivate
Private Sub Worksheet_Deactivate()'CodeEnd 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.NameEnd Sub