VBA - Ereignisse

Reaktion auf Events

Seit es "interaktive Betriebssysteme" gibt, können Programme auf "Ereignisse" (events) reagieren. Auf dieser Seite finden sie Hinweise, wie Ereignisse in VBA behandelt werden (event handler)
Visual Basic for Applications VBA Visual Basic for Applications
Workbook Workbook-Events Ereignisse einer Kalkulations-Datei
Worksheet Worksheet-Events Ereignisse eines Kalkulations-Blatts
Event OnTime Auslösen von Ereignissen zu bestimmten Zeiten
Links VBA-Links Ausgewählte Links zum Thema 'VBA @ Events'

Ereignisse (Events)

Die Befehle der ersten Computer-Programme liefen in einer exakt vorbestimmten Reihenfolge ab. Jedes Programm konnte nur genau seinen Zweck erfüllen, während seiner Laufzeit konnte der Computer nicht auf andere Anforderungen reagieren. Ein Problem stellte u.a. die Zusammenarbeit mit "langsamer" Hardware dar: Das Programm mußte in einer Schleife so lange den Hardware-Zustand lesen, bis ein gewünschter Zustand erreicht war. Während dieser Zeit war es praktisch unmöglich, andere Arbeiten auszuführen.

Interrupt

Die erste Maßnahme, welche eine Reaktion auf Ereignisse ermöglichte, war die Unterstützung von Interrupts.
Ein Interrupt ist ein elektrisches Signal auf einer speziellen Interrupt-Leitung, später codiert auf mehrere INT-Leitungen (z.B. 3 Leitungen -> 3 Bit -> 8 mögliche Interrupts).
Jedem Interrupt wird eine Adresse im RAM zugeordnet.
Falls der Prozessor (CPU) ein INT-Signal erhält, sichert er den Inhalt seiner Register (auf den sog. Stack) und springt dann zur betreffenden INT-Adresse:
Dort befindet sich ein kleines Programm, welches auf das INT-Ereignis reagiert.

Nach Abschluss des INT-Programms regeneriert der Prozessor seine Register und führt das ursprüngliche Programm weiter.
Damit bestand die Möglichkeit, Hardware für einige Zeit "unbeaufsichtigt" arbeiten zu lassen und bei auftretendem Bedarf zu reagieren.
Während der Wartezeit (zwischen den INTs) kann jedes beliebige Programm arbeiten - allerdings mit kleinen Pausen.
INTs sind noch heute wichtig, z.B. der NMI (non maskable Interrupt), der bei sehr dringenden Ereignissen wie z.B. Ausfall der Netzspannung ausgelöst wird.

Event

Fenster-Technik und Maus brachten eine neue Programmier-Technik, die Ereignis-gesteuerten (event-driven) Programme:
Ein typisches Fenster-Programm baut nach seinem Start ein Fenster (mit allen Bestandteilen: Menüs, Werkzeug, etc) auf, geht dann jedoch in Ruhestellung.
Das Programm wartet auf Ereignisse, wie z.B. die Auslösung eines Menübefehls, das Anklicken eines Werkzeugs, etc.
Jedes dieser (Software)-Ereignisse löst ein darauf spezialisiertes Programm aus, den 'Event-Handler'.

Anwendungs-Programme verfügen normalerweise über einen kompletten Satz solcher Handler für alle auftretenden Events.
Moderne Programmiersprachen bieten darüber hinaus die Möglichkeit, eigene Event-Handler zu erstellen, und sie zumindest zeitweise an Stelle der Standard-Handler einzusetzen.
Typische Ereignisse:
Programm (Öffnen, Schließen, Speichern, Drucken, ...),
Fenster (Öffnen, Verschieben, Vordergrund, Hintergrund, ...), Objekt (Mauszeiger darüber, Klick, ...), Fehler, Zeitgeber, etc.

Workbook Workbook - Ereignisse

Diese Gruppe von Ereignissen bezieht sich auf eine ganze Kalkulation-Datei. Die Programme zur Behandlung (event-handler) dieser Ereignisse finden sie im VBA-Projektfenster beim Anklicken des Workbook-Icons.

Das Code-Fenster bietet oben 2 Auswahl-Listen.
Wählen sie aus der Liste links oben "Workbook".
Nun finden sie in der Liste rechts oben die Handler aller Workbook-events.
Bei Auswahl eines Handlers wird ein leerer Prototyp des entsprechenden Subs zur Verfügung gestellt.
' Einige Beispiele für leere Prototypen
' von Workbook-Event-Handlern
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_Activate()
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
End Sub
Zur besseren Übersicht organisieren sie alle auszuführenden Arbeiten in eigenen Subs.
Falls diese Subs ausschließlich von den Event-Handlern benutzt werden, dann deklarieren sie diese als Private und organisieren den Code am Code-Blatt des Workbooks.
Falls die Subs auch anders benutzt werden (z.B. interaktiv), dann organisieren sie den Code in einem VBA-Modul.
Private Sub Workbook_Open()
Call open_handler
End Sub

Private Sub open_handler()
MsgBox ("Event Workbook_Open")
End Sub
Workbook_Open
Tipps und Tricks auf einer eigenen Webseite
Wird unmittelbar nach Öffnen einer Kalkulations-Datei ausgelöst.
Workbook_BeforeClose Wird unmittelbar vor dem Schließen einer Kalkulations-Datei ausgelöst.
Workbook_Activate  
Workbook_Deactivate  
Workbook_BeforePrint Wird unmittelbar vor dem Drucken einer Kalkulations-Datei ausgelöst.
Workbook_BeforeSave Wird unmittelbar vor dem Speichern einer Kalkulations-Datei ausgelöst.

Worksheet Worksheet - Ereignisse

Diese Gruppe von Ereignissen bezieht sich auf ein einzelnes Kalkulationsblatt. Die Programme zur Behandlung (event-handler) dieser Ereignisse finden sie im VBA-Projektfenster beim Anklicken des Worksheet-Icons.

Das Code-Fenster bietet oben 2 Auswahl-Listen.
Wählen sie aus der Liste links oben "Worksheet".
Nun finden sie in der Liste rechts oben die Handler aller Worksheetevents.
Bei Auswahl eines Handlers wird ein leerer Prototyp des entsprechenden Subs zur Verfügung gestellt.
' Einige Beispiele für leere Prototypen
' von Worksheet-Event-Handlern
Private Sub Worksheet_Activate()
End Sub
Private Sub Worksheet_Deactivate()
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
Zur besseren Übersicht organisieren sie alle auszuführenden Arbeiten in eigenen Subs.
Falls diese Subs ausschließlich von den Event-Handlern benutzt werden, dann deklarieren sie diese als Private und organisieren den Code am Code-Blatt des Worksheets.
Falls die Subs auch anders benutzt werden (z.B. interaktiv), dann organisieren sie den Code in einem VBA-Modul.
Private Sub Worksheet_Activate()
  Call activate_handler
End Sub

Private Sub activate_handler()
  MsgBox ("Event Worksheet_Activate")
End Sub
Worksheet_Activate  
Worksheet_Deactivate  
Worksheet_Change:
Tipps & Tricks auf einer eigenen Seite zum Thema Worksheet-Change
Wird nach jeder Änderung auf einem Kalkulationsblatt ausgelöst.

VBA-Links Ausgewählte Links zum Thema 'VBA @ Events'

  Visual Basic 2005 Handbuch (Andreas Kühnel / Galileo) - Tastatur- und Maus-Ereignisse