Automatisches Ausführen beim Öffnen oder Schliessen einer Zeichnung


  
 Bezieht sich auf 
  
 Produkt(e):MicroStation
 Version(en):08.11.09.578
 Umgebung: Windows XP 64 bit,Windows 7 64 bit
 Produktbereich: Programmierung
 Produktunterbereich: VBA
 Ursprünglicher Autor:Artur Goldsweer, Bentley Technical Support Group
  

Oftmals steht man vor der Aufgabe, beim Öffnen oder Schliessen von Zeichnungen etwas durchführen zu müssen. Sei es um Einstellungen vorzunehmen oder Kontrollroutinen zu starten, die die Zeichnungen prüfen oder korrigieren. 

Hier möchte ich ein kleines Beispiel vorstellen, das in großen Teilen aus der VBA Hilfe von MicroStation stammt und nur etwas modifiziert und zusammengestellt ist.

In dem Beitrag zum automatischen Ausführen beim Laden einer VBA Routine hatte ich bereits angemerkt, dass man damit zwar automatisch etwas ausführen kann, aber dies passiert, bevor noch eine Zeichnung geöffnet ist.

Deshalb kann dieses Beispiel als Erweiterung gesehen werden, und zwar wird in diesem Beispiel beim Laden der VBA Routine ein Eventhandler installiert, so dass später bei jedem Öffnen oder Schliessen einer Zeichnung dieses Ereignis oder Event abgefangen wird, und man beim Eintreten dieser Ereignisse etwas ausführen kann.

Die Möglichkeit etwas beim Öffnen oder Schliessen habe ich nur durch eine Messagebox angedeutet, dies kann dann für die eigene Verwendung entsprechend ersetzt werden.

Das Modul mit der Subroutine OnProjectLoad könnte folgendermaßen aussehen:

Dim oOpenClose As clsOpenClose
Sub OnProjectLoad()
        Set oOpenClose = New clsOpenClose
        MsgBox "Eventhandler geladen"
End Sub

Wenn nun diese VBA Routine so eingestellt wird, dass sie beim Start von MicroStation geladen wird, also über MS_VBAAUTOLOADPROJECTS gelistet ist, wird der Eventhandler im Klassenmodul clsOpenClose geladen.

Dabei wird ein Klassenmodul clsOpenClose geladen, das gesondert als class Module definiert werden muss:

    Dim WithEvents hooks As Application

    Private Sub Class_Initialize()
        Set hooks = Application
    End Sub
    Private Sub hooks_OnDesignFileClosed(ByVal DesignFileName As String)
        MsgBox ActiveDesignFile.FullName + " geschlossen"
    End Sub

    Private Sub hooks_OnDesignFileOpened(ByVal DesignFileName As String)
        MsgBox ActiveDesignFile.FullName + " geoeffnet"
    End Sub

In diesem Klassenmodul werden die beiden Ereignisse  OnDesignFileOpened  und OnDesignFileClosed abgefangen, d.h. sobald eine Zeichnung geöffnet oder geschlossen wird, erscheint eine Messagebox, die angibt, welche Zeichnung soeben geöffnet oder geschlossen wurde.

Der Einfachheit halber ist dieses Beispiel als fertiges VBA Projekt hier zum Download hinterlegt:

VBA Routine zum Installieren eines Eventhandlers