So verwenden Sie Arbeitsmappenereignisse in VBA

Inhaltsverzeichnis:

Anonim

Möglicherweise möchten Sie Ihr Makro/VBA-Snippet ausführen, wenn eine bestimmte Arbeitsmappe ausgewählt ist, ein Blatt in der Arbeitsmappe ausgewählt ist, die Zelle ihren Wert ändert, wenn ein Doppelklick erfolgt, wenn ein Blatt hinzugefügt wird usw. In all diesen Fällen verwenden wir Arbeitsmappen-Ereignishandler. Der Event Handler hilft uns, VBA-Code auszuführen, wenn ein bestimmtes Ereignis eintritt.

In diesem Artikel werden wir kurz über jeden Workbook Event Handler lernen.

Was ist ein Arbeitsmappen-Ereignishandler?

Ein Arbeitsmappen-Ereignishandler ist eine Unterroutine, die sich lokal in einer Arbeitsmappe befindet. Dieser Code funktioniert nur mit den Komponenten einer Arbeitsmappe. Das sind die Arbeitsmappen selbst, ihre Blätter und Bereiche.

Wo schreibe ich Arbeitsmappen-Ereignishandlercode?

Die Arbeitsmappenereignisse werden nur in das Arbeitsmappenobjekt geschrieben. Wenn Sie ein Arbeitsmappenereignis in einem normalen Modul schreiben, wird kein Fehler ausgegeben, aber es funktioniert einfach nicht.

Um in das Arbeitsmappenobjekt zu schreiben. Doppelklicken Sie darauf oder klicken Sie mit der rechten Maustaste und klicken Sie auf den Ansichtscode. Der Code-Schreibbereich wird angezeigt.

Wie schreibe ich Code für ein bestimmtes Ereignis in der Arbeitsmappe?

Wenn Sie sich jetzt im Bearbeitungsmodus befinden, sehen Sie im Dropdown-Menü in der oberen linken Ecke Allgemeines. Klicken Sie auf das Dropdown-Menü und wählen Sie die Arbeitsmappe aus. In der Dropdown-Liste in der oberen rechten Ecke werden alle Ereignisse angezeigt. Wählen Sie aus, was Sie brauchen, und ein Skelettcode für dieses Ereignis wird für Sie geschrieben.

Jedes Ereignis hat einen festen Prozedurnamen. Dies sind die reservierten Subroutinennamen, die mit workbook_ beginnen. Sie können sie nicht für andere Unterprogramme verwenden
(Sie können, aber es werden normale Unterprogramme sein).

Wichtig: Jedes Unterprogramm aus dieser Liste wird bei dem angegebenen Ereignis ausgeführt.

Eine Art von Arbeitsmappenereignisprozedur kann nur einmal in eine Arbeitsmappe geschrieben werden. Wenn Sie zwei gleiche Ereignisbehandlungsprozeduren in eine Arbeitsmappe schreiben, führt dies zu einem Fehler und keine davon wird ausgeführt. Natürlich wird der Fehler mehrdeutige Unterprogramme sein.

Lassen Sie uns kurz über jedes der Ereignisse lernen.
1. Die Workbook_SheetChange (ByVal Sh als Objekt, ByVal Ziel als Bereich) Vorfall

Dieses Ereignis wird ausgelöst, wenn wir Änderungen an den enthaltenen Arbeitsblättern vornehmen (Formatierung ausgeschlossen). Wenn Sie etwas tun möchten, wenn in einem Blatt eine Änderung vorgenommen wird, lautet der Code:

 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 'etwas tun Msgbox "etwas gemacht" End Sub 

Das "Sh" ist immer das aktive Blatt. Das "Ziel" ist immer die aktive Zelle.

Ein anderes Beispiel: Sie können Datum und Uhrzeit in Cel,prl B1 eingeben, wenn sich A1 ändert. In diesem Fall verwenden wir das Ereignis workbook_sheetchange. Der Code würde so aussehen:

 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Target.Address = "$A$1" Then Range("B1").Value2 = Format(Now(), "hh:mm:ss") End If End Sub 

Dies zielt nur auf die Zelle A1 auf jedem Blatt ab, da wir das Objekt "sh" nicht angegeben haben.

2. Die Arbeitsmappe_Activate() Vorfall

Dieses Ereignis wird ausgelöst, wenn der Ereigniscode mit der Arbeitsmappe aktiviert wird. Der Skelettcode für dieses Ereignis lautet:

 Private Sub Workbook_Activate() End Sub

Ein einfaches Beispiel ist die Anzeige des Arbeitsmappennamens, wenn er ausgewählt wird.

 Private Sub Workbook_Activate() MsgBox "Sie befinden sich in der Arbeitsmappe" & Activeworkbook.Name End Sub 

Sobald Sie auf die Arbeitsmappe gelangen, die diesen Code enthält, wird das Ereignis ausgeführt und die Meldung "Sie befinden sich im Arbeitsmappennamen" angezeigt (in meinem Fall ist Sheet2).
3. Die Arbeitsmappe_Open() Vorfall

Dies ist eine der am häufigsten gestellten Fragen zum Ausführen eines Makros, sobald die Arbeitsmappe geöffnet wird. Das ist die Antwort. Dieses Arbeitsmappenereignis wird ausgeführt, sobald die Arbeitsmappe geöffnet wird. Im Gegensatz zu Workbook_Activate() wird dieser Code nur einmal ausgeführt, nicht bei jeder Aktivierung.

Private Sub Workbook_Open() 'Ihr Code' End Sub 

Das folgende Beispiel-Workbook_Open-Ereignis öffnet einfach eine Willkommensnachricht, wenn Sie den Code öffnen, der die Arbeitsmappe enthält.

 Private Sub Workbook_Open() MsgBox "Willkommen bei der Masterdatei" End Sub

4. Die Arbeitsmappe_Deaktivieren() Vorfall

Dieses Ereignis wird beim Verlassen der Code enthaltenden Arbeitsmappe ausgelöst. Mit anderen Worten, wenn Sie etwas tun möchten, z. B. Blätter ausblenden oder etwas beim Wechseln der Arbeitsmappe verwenden möchten, verwenden Sie dieses VBA-Ereignis. Die Syntax lautet:

 Private Sub Workbook_Deactivate() 'Ihr Code' End Sub 

Das folgende Beispiel-Workbook_Deativate-Ereignis wird einfach eine Nachricht anzeigen, dass Sie das Master-Blatt verlassen haben, wenn Sie dieses Blatt verlassen.

 Private Sub Workbook_Deactivate() MsgBox "Sie haben das Master-Blatt verlassen" End Sub 

5. Die Arbeitsmappe_BeforeClose() Vorfall

Dieses Ereignis wird ausgelöst, wenn Sie das Löschen des VBA-Ereignis enthaltenden Blatts bestätigen. Die Syntax ist einfach:

 Private Sub Workbook_BeforeClose(Cancel as Boolean) End Sub 

Abbrechen kann auf true gesetzt werden, wenn Sie die Arbeitsmappe geöffnet lassen möchten.
Im folgenden Code werden Sie gefragt, ob Sie den Inhalt der Arbeitsmappe, die demnächst geschlossen wird, speichern möchten.

 Private Sub Workbook_BeforeClose(Cancel as Boolean) ans = MsgBox("Möchten Sie den Inhalt dieser Arbeitsmappe speichern?", vbYesNo) If ans = True Then thisworkbook.save End If End Sub 

6. Die Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Vorfall

Dieses Ereignis wird ausgelöst, wenn die Arbeitsmappe gespeichert wird. Die Syntax ist einfach:

 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) End Sub 

SaveAsUI wird auf True gesetzt, wenn eine Änderung in der Arbeitsmappe (nicht in VBA) vorliegt.

Abbrechen kann auf true gesetzt werden, wenn die Arbeitsmappe nicht gespeichert werden soll.

Der folgende Code fragt Sie, ob Sie den Inhalt der Arbeitsmappe speichern möchten, die gerade gespeichert werden soll.

 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel as Boolean) ans = MsgBox("Möchten Sie den Inhalt dieser Arbeitsmappe wirklich speichern?", vbYesNo) If ans = False Then Cancel = True End If End Sub 

7. Die Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Vorfall

Dieses Ereignis wird ausgelöst, wenn die Arbeitsmappe gespeichert wird. Die Syntax ist einfach:

 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) End Sub 

SaveAsUI wird auf True gesetzt, wenn eine Änderung in der Arbeitsmappe (nicht in VBA) vorliegt.

Abbrechen kann auf true gesetzt werden, wenn die Arbeitsmappe nicht gespeichert werden soll.

Der folgende Code fragt Sie, ob Sie den Inhalt der Arbeitsmappe speichern möchten, die gerade gespeichert werden soll.

 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel as Boolean) ans = MsgBox("Möchten Sie den Inhalt dieser Arbeitsmappe wirklich speichern?", vbYesNo) If ans = False Then Cancel = True End If End Sub 

8. Die Workbook_NewSheet(ByVal Sh als Objekt) Vorfall

Dieses Ereignis wird ausgelöst, wenn Sie der Arbeitsmappe ein neues Blatt hinzufügen. Die Syntax ist einfach:

 Private Sub Workbook_NewSheet(ByVal Sh As Object) End Sub 

Das Sh ist das Blattobjekt. Der Typ ist eigentlich ein Kernobjekt, sodass das Ereignis auch dann funktioniert, wenn wir ein Diagrammblatt, ein Makroblatt oder ein Dialogblatt hinzufügen.

Der folgende Code fügt den Namen des neu hinzugefügten Blatts hinzu und zeigt ihn an.

 Private Sub Workbook_NewSheet(ByVal Sh As Object) MsgBox "Sie haben ein neues Blatt hinzugefügt. " & Sh.Name End Sub 

Es gibt viele weitere Ereignisse des Arbeitsmappenobjekts. Wir können sie hier nicht alle besprechen. Wenn Sie etwas über ein bestimmtes Ereignis wissen möchten, fragen Sie im Kommentarbereich unten nach. Ich hoffe, ich konnte die Grundlagen der Arbeitsbuchereignisse in diesem Artikel erklären. Lassen Sie mich im Kommentarbereich unten wissen, ob es Ihnen geholfen hat.
In Verbindung stehende Artikel:

Verwenden des Arbeitsblattänderungsereignisses zum Ausführen eines Makros, wenn eine Änderung vorgenommen wird | Um Ihr Makro bei jeder Blattaktualisierung auszuführen, verwenden wir die Arbeitsblattereignisse von VBA.

Makro ausführen, wenn eine Änderung am Blatt im angegebenen Bereich vorgenommen wurde | Verwenden Sie diesen VBA-Code, um Ihren Makrocode auszuführen, wenn sich der Wert in einem angegebenen Bereich ändert. Es erkennt jede Änderung im angegebenen Bereich und löst das Ereignis aus.

Einfachster VBA-Code zum Hervorheben der aktuellen Zeile und Spalte mit | Verwenden Sie dieses kleine VBA-Snippet, um die aktuelle Zeile und Spalte des Blatts hervorzuheben.

Populäre Artikel:

50 Excel-Kurzbefehle zur Steigerung Ihrer Produktivität | Werden Sie schneller bei Ihrer Aufgabe. Diese 50 Tastenkombinationen machen Ihre Arbeit in Excel noch schneller.

Die SVERWEIS-Funktion in Excel | Dies ist eine der am häufigsten verwendeten und beliebtesten Funktionen von Excel, die verwendet wird, um Werte aus verschiedenen Bereichen und Blättern zu suchen.

ZÄHLENWENN in Excel 2016 | Zählen Sie Werte mit Bedingungen mit dieser erstaunlichen Funktion. Sie müssen Ihre Daten nicht filtern, um einen bestimmten Wert zu zählen. Die Countif-Funktion ist unerlässlich, um Ihr Dashboard vorzubereiten.

So verwenden Sie die SUMIF-Funktion in Excel | Dies ist eine weitere wesentliche Funktion des Dashboards. Dies hilft Ihnen, Werte unter bestimmten Bedingungen zusammenzufassen.