Es stehen eine ganze Reihe von Ereignis-Listenern zur Verfügung, mit denen man wirklich clevere Makros schreiben kann (gesteuerte Aktionen, die vom Zustand bzw. der Änderung eines bestimmten Dokuments oder Objekts abhängen). Im folgenden Beispiel zeige ich Ihnen einen Code, mit dem vermieden werden kann, dass vom Nutzer in einem Dokument Formen gelöscht werden.

Dieser Code kann in ein beliebiges VBA-Projekt eines Dokuments eingefügt werden (VBAProject "YourFileName"->CorelDRAW X5/X6 Objects>ThisDocument). Falls Sie den Code in selbst kodierten Makros wiederverwenden möchten, können Sie die globale Variable "Document" durch "GlobalMacroStorage" ersetzen. Verwenden Sie diesen Code jedoch nicht im vordefinierten VBA-Projekt "GlobalMacros". Das könnte zu einer Destabilisierung Ihrer Corel Anwendung führen.

Alle Variablen müssen ausdrücklich deklariert werden:
Option Explicit
Damit wird die globale Variable "CurrentDoc" deklariert.

Da wir in der Lage sein möchten, die Ereignisüberwachung nach unserer Wahl zu aktivieren und zu deaktivieren, benötigen wir diese Variable, damit wir sie zusammen mit dem aktiven Dokument setzen oder zurücksetzen können; andernfalls könnten wir auch die bereits festgelegte Variable "Document" verwenden, dann würde unser Code aber ständig ausgeführt.

Private WithEvents CurrentDoc As Document
Diese Variable hilft, eine ständige Ereignisauslösung wie mit "CurrentDoc_ShapeMove" zu vermeiden: Dim eventHasAlreadyFired As Boolean

 Die globale Variable "Document" wird zur Initialisierung der Ereignisüberwachung benutzt, und ist vorab deklariert, da dieser VBA-Code an das Dokument angehängt und mit ihm gespeichert wird. Wenn Sie Ihren eigenen Code schreiben, haben Sie stattdessen Zugriff auf die Variable "GlobalMacroStorage" Das spezifische Ereignis (in diesem Fall document "Open") wird der Variablen mit einem Unterstrich angehängt.
Private Sub Document_Open()

Wenn nun das Dokument geöffnet wird und der Nutzer der Ausführung des angehängten Makros zustimmt, wird die Variable "CurrentDoc" ausgewählt und die Ereignisüberwachung initialisiert:
   bindEvents
End Sub

Setzen Sie mit dieser Prozedur die Variable CurrentDoc fest, um die Ereignisüberwachung bei "CurrentDoc" zu aktivieren:
Sub bindEvents()

Um das aktive Dokument zu holen, müssen wir es aktivieren:
    ActiveDocument.Activate

"CurrentDoc" soll NUR gesetzt werden, wenn die Variable noch nicht gesetzt ist:

If CurrentDoc Is Nothing Then: Set CurrentDoc = ActiveDocument
End Sub

Die Ereignisüberwachung wird mit dieser Prozedur gestoppt, da sie die globale Variable "CurrentDoc" zurücksetzt.
Sub unbindEvents()

Die Variable soll NUR zurückgesetzt werden, wenn sie ausdrücklich gesetzt ist:
    If Not CurrentDoc Is Nothing Then: Set CurrentDoc = Nothing
End Sub

Diese Prozedur wird ausgeführt, sobald der Nutzer das Dokument schließt.
Es eignet sich perfekt, um unsere Ereignisüberwachung bei "CurrentDoc" mit "unbindEvents" abzubrechen.
Private Sub Document_QueryClose(Cancel As Boolean)
Die Ereignisüberwachung soll NUR aufgehoben werden, wenn der Nutzer das Dokument WIRKLICH schließt. Wenn er das Schließen abbricht, wird die Ereignisüberwachung weitergeführt.
    If Cancel = False Then: unbindEvents
End Sub

Zeit zu handeln: Diese Prozedur wird ausgeführt, wenn der Nutzer versucht, eine Form im Dokument zu löschen.
Private Sub CurrentDoc_ShapeDelete(ByVal Count As Long)

Diese Aktion soll nur einmal ausgeführt werden:
    If eventHasAlreadyFired = True Then: Exit Sub
Im Fenster „Immediate" wird angegeben, wie viele Formen gelöscht werden sollten:
    Debug.Print Count & " Shape/s deleted."

Zeigt dem Nutzer eine Popup-Nachricht an:
    MsgBox "Sie dürfen in diesem Dokument keine Formen löschen!", vbExclamation

Die Form/die Formen wurden gelöscht, also drehen wir "die Zeit zurück" mit dieser Zeile:
    CurrentDoc.Undo 1

Setzt eine „Flagge", um zu festzulegen, dass dieses Ereignis bereits ausgelöst wurde. Wenn Sie das "ShapeDelete"-Ereignis permanent überwachen möchten, können Sie diese Zeile auslassen.
    eventHasAlreadyFired = True
End Sub

Tipp von Maurice Beumers, CorelDRAW-Meister, Grafikdesigner und Illustrator.