Wenn Sie versuchen, Excel VBA gut zu verstehen , können Sie wahrscheinlich von einigen Beispielen profitieren, um diese visuellen grundlegenden Fähigkeiten zu entwickeln. Hier finden Sie einige Excel-VBA-Beispiele, damit Sie sich mit diesem Event-Handling-Geschäft vertraut machen können.
Excel VBA-Beispiel: Das Open-Ereignis für eine Arbeitsmappe
Eines der am häufigsten verwendeten Excel VBA-Ereignisse ist das Workbook Open-Ereignis. Angenommen, Sie haben eine Arbeitsmappe, die Sie täglich verwenden. Die Prozedur Workbook_Open in diesem Beispiel wird jedes Mal ausgeführt, wenn die Arbeitsmappe geöffnet wird. Das Verfahren prüft den Wochentag; Wenn es Freitag ist, zeigt der Code eine Erinnerungsnachricht für Sie an.
Gehen Sie folgendermaßen vor, um die Excel VBA-Prozedur zu erstellen, die jedes Mal ausgeführt wird, wenn das Arbeitsmappen-Öffnen-Ereignis auftritt:
Öffnen Sie die Excel-Arbeitsmappe.
Jede Excel-Arbeitsmappe ist ausreichend.
Drücken Sie Alt+F11, um die VBE zu aktivieren.
Suchen Sie die Arbeitsmappe im Projektfenster.
Doppelklicken Sie bei Bedarf auf den Projektnamen, um seine Elemente anzuzeigen.
Doppelklicken Sie auf das Element DieseArbeitsmappe.
Die VBE zeigt ein leeres Codefenster für das ThisWorkbook-Objekt an.
Wählen Sie im Codefenster aus der Dropdown-Liste Objekt (links) die Option Arbeitsmappe aus.
Die VBE gibt die Anfangs- und Endanweisungen für eine Workbook_Open-Prozedur ein.
Geben Sie die folgenden Anweisungen ein, damit die komplette Ereignisprozedur wie folgt aussieht:
Private Unterarbeitsmappe_Open()
Dim Msg As String
Wenn Wochentag (jetzt) = 6 Dann
Msg = "Heute ist Freitag. Nicht vergessen"
Msg = Msg & "Senden Sie den TPS-Bericht!"
MsgBox Msg
Ende Wenn
End Sub
Das Codefenster sollte so aussehen.

Diese Ereignishandlerprozedur wird ausgeführt, wenn die Arbeitsmappe geöffnet wird.
Workbook_Open wird automatisch ausgeführt, wenn die Arbeitsmappe geöffnet wird. Es verwendet die WeekDay-Funktion von VBA, um den Wochentag zu bestimmen. Wenn es Freitag (Tag 6) ist, erinnert ein Meldungsfeld den Benutzer daran, einen Bericht zu senden. Wenn nicht Freitag ist, passiert nichts.
Wenn heute kein Freitag ist, fällt es Ihnen möglicherweise schwer, dieses Verfahren zu testen. Sie können die 6 einfach so ändern, dass sie der aktuellen Tagesnummer entspricht.
Und natürlich können Sie dieses Verfahren beliebig ändern. Die folgende Version zeigt beispielsweise jedes Mal eine Meldung an, wenn die Arbeitsmappe geöffnet wird. Das nervt nach einiger Zeit.
Eine Workbook_Open-Prozedur kann fast alles tun. Diese Ereignishandler werden häufig für Folgendes verwendet:
- Willkommensnachrichten anzeigen (wie in Franks cooler Arbeitsmappe)
- Andere Arbeitsmappen öffnen
- Aktivieren eines bestimmten Arbeitsblatts in der Arbeitsmappe
- Einrichten von benutzerdefinierten Kontextmenüs
Hier ist ein letztes Excel-VBA-Beispiel für eine Workbook_Open-Prozedur, die die Funktionen GetSetting und SaveSetting verwendet, um zu verfolgen, wie oft die Arbeitsmappe geöffnet wurde. Die Funktion SaveSetting schreibt einen Wert in die Windows-Registrierung, und die Funktion GetSetting ruft diesen Wert ab (weitere Informationen finden Sie im Hilfesystem). Das folgendeExcel VBA-Beispiel ruft die Anzahl aus der Registrierung ab, erhöht sie und speichert sie dann wieder in der Registrierung. Es teilt dem Benutzer auch den Wert von Cnt mit, der der Häufigkeit entspricht, mit der die Arbeitsmappe geöffnet wurde.
Private Unterarbeitsmappe_Open()
Dim Cnt As Long
Cnt = GetSetting("MeineApp", "Einstellungen", "Öffnen", 0)
Cnt = Cnt + 1
SaveSetting "MyApp", "Settings", "Open", Cnt
MsgBox "Diese Arbeitsmappe wurde " & Cnt & " mal geöffnet."
End Sub

Verwenden eines Workbook_Open-Ereignishandlers, um zu verfolgen, wie oft eine Arbeitsmappe geöffnet wurde.
Excel VBA-Beispiel: Das BeforeClose-Ereignis für eine Arbeitsmappe
Hier ist ein Beispiel für die Excel VBA Workbook_BeforeClose-Ereignishandlerprozedur, die automatisch ausgeführt wird, unmittelbar bevor die Arbeitsmappe geschlossen wird. Diese Prozedur befindet sich im Codefenster für ein ThisWorkbook-Objekt:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Msg As String
Dim Ans As Long
Dim FName als String
Msg = "Möchten Sie ein Backup dieser Datei erstellen?"
Ans = MsgBox(Msg, vbJaNein)
Wenn Ans = vbJa Dann
FName = "F:\BACKUP\" & ThisWorkbook.Name
ThisWorkbook.SaveCopyAs FName
Ende Wenn
End Sub
This routine uses a message box to ask the user whether he would like to make a backup copy of the workbook. If the answer is yes, the code uses the SaveCopyAs method to save a backup copy of the file on drive F. If you adapt this procedure for your own use, you need to change the drive and path.
Excel programmers often use a Workbook_BeforeClose procedure to clean up after themselves. For example, if you use a Workbook_Open procedure to change some settings when you open a workbook (hiding the status bar, for example), it’s only appropriate that you return the settings to their original state when you close the workbook. You can perform this electronic housekeeping with a Workbook_BeforeClose procedure.
Beachten Sie bei der Verwendung des Workbook_BeforeClose-Ereignisses Folgendes: Wenn Sie Excel schließen und eine geöffnete Datei seit dem letzten Speichern geändert wurde, zeigt Excel das übliche Meldungsfeld „Möchten Sie Ihre Änderungen speichern“ an. Durch Klicken auf die Schaltfläche Abbrechen wird der gesamte Schließvorgang abgebrochen. Aber das Event Workbook_BeforeClose wird trotzdem ausgeführt.
Excel VBA-Beispiel: Das BeforeSave-Ereignis für eine Arbeitsmappe
Das BeforeSave-Ereignis wird, wie der Name schon sagt, ausgelöst, bevor eine Arbeitsmappe gespeichert wird. Dieses Ereignis tritt ein, wenn Sie Datei → Speichern oder Datei → Speichern unter wählen.
Das folgende Verfahren, die in dem platziert Codefenster für ein Objekt Thisworkbook, zeigt das Ereignis Before. Die Routine aktualisiert den Wert in einer Zelle (Zelle A1 auf Sheet1) jedes Mal, wenn die Arbeitsmappe gespeichert wird. Mit anderen Worten, Zelle A1 dient als Zähler, um zu verfolgen, wie oft die Datei gespeichert wurde.
Private Unterarbeitsmappe_BeforeSave(ByVal SaveAsUI _
Als Boolean, Abbrechen als Boolean)
Zähler als Bereich dimmen
Zähler setzen = Sheets("Sheet1").Range("A1")
Zähler.Wert = Zähler.Wert + 1
End Sub
Beachten Sie, dass die Prozedur Workbook_BeforeSave zwei Argumente hat: SaveAsUI und Cancel. Um zu veranschaulichen, wie diese Argumente funktionieren, untersuchen Sie das folgende Makro, das ausgeführt wird, bevor die Arbeitsmappe gespeichert wird. Dieses Verfahren versucht zu verhindern, dass der Benutzer die Arbeitsmappe unter einem anderen Namen speichert. Wenn der Benutzer Datei → Speichern unter wählt, ist das Argument SaveAsUI True.
Wenn der Code ausgeführt wird, überprüft er den SaveAsUI-Wert. Wenn diese Variable True ist, zeigt die Prozedur eine Meldung an und setzt Cancel auf True, wodurch der Speichervorgang abgebrochen wird.
Private Unterarbeitsmappe_BeforeSave(ByVal SaveAsUI _
Als Boolean, Abbrechen als Boolean)
Wenn SaveAsUI Then
MsgBox "Sie können keine Kopie dieser Arbeitsmappe speichern!"
Abbrechen = Wahr
Ende Wenn
End Sub
Beachten Sie, dass dieses Verfahren niemanden daran hindert, eine Kopie unter einem anderen Namen zu speichern. Wenn jemand dies wirklich tun möchte, kann er oder sie die Arbeitsmappe einfach mit deaktivierten Makros öffnen. Wenn Makros deaktiviert sind, werden auch Ereignishandlerprozeduren deaktiviert, was sinnvoll ist, da es sich schließlich um Makros handelt.