Ein Symbol f�r einen Makronamen in
verschiedenen Dateien

29.05.2002


Bitte beachten Sie, dass dieser Beitrag
fortgeschrittene Kenntnisse in VBA erfordert !

Was zun�chst recht verwirrend klingen mag ist recht schnell erkl�rt:
Stellen Sie sich vor, Sie arbeiten mit mehreren Dateien,
die alle ein gleichnamiges Makro beinhalten,
jedoch verschiedene Aufgaben erledigen soll. 

Eine neue Symbolleiste mit einem Symbol zu erstellen
ist keine gro�e Sache, jedoch steckt hinter diesem Symbol
das unter "OnAction" angegebene Makro in einer bestimmten Datei,
und zwar nur in "dieser einen" Datei !

Die folgende L�sung soll verdeutlichen,
wie einfach es ist, "OnAction" je nach ge�ffneter Datei anzupassen.

Diese Datei hat die Aufgabe eine neue Symbolleiste mit einem
Symbol zu erstellen. Zun�chst wird "OnAction" das Makro "MachWas"
zugewiesen, welches sich in der gleichen Datei befindet.
Des weiteren �berwacht diese Datei mit Hilfe eines Klassenmodules
das �ffnen von Dateien, um somit die Eigenschaft "OnAction" zu �ndern.
Wird also eine andere Datei ge�ffnet, soll sich die "OnAction" Eigenschaft
auf die gerade ge�ffnete Datei beziehen, ebenfalls auf den
Makronamen "MachWas".
'** DieseArbeitsmappe **
Dim AppObject As New CAppLog
Private Sub Workbook_Open()
    Call Symbolleiste_erstellen
    Set AppObject.app = Application
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Set AppObject.app = Nothing
End Sub

'** Modul1 **
Const Symbolleistenname = "Eigene Symbolleiste"
Const Symbolname = "Test"
Const Makroname = "MachWas"
'
'Erstellt eine neue Symbolleiste
'
Sub Symbolleiste_erstellen()
    On Error Resume Next
    Application.CommandBars(Symbolleistenname).Delete
    Set CB = Application.CommandBars.Add(Name:=Symbolleistenname, _
       temporary:=True, Position:=msoBarTop)
    CB.Visible = True
    Set CBC = CB.Controls.Add(Type:=msoControlButton)
    With CBC
        .Name = Symbolname
        .FaceId = 59
        .Caption = "Test"
        .OnAction = Makroname
    End With
End Sub
'
'�ndert die Eigenschaften der Symbolleiste (OnAction)
'
Sub SymbolMakro�ndern(Dateiname)
    On Error Resume Next
    Application.CommandBars(Symbolleistenname). _
       Controls(Symbolname).OnAction = Dateiname & "!" & Makroname
End Sub
'
'Testmakro, steckt hinter dem Symbol
'
Sub MachWas()
    MsgBox "Hier meldet sich ein Makro aus der 'Hauptdatei'", vbExclamation
End Sub

'** Klassenmodul "CAppLog" **
Public WithEvents app As Application   
Private Sub app_WorkbookOpen(ByVal WBook As Excel.Workbook)
    Dateiname = WBook.FullName
    Call SymbolMakro�ndern(Dateiname)
End Sub

Erstellen Sie sich nun einige Testdateien,
die alle ein Makro namens "MachWas" beinhalten.
Zum Testen reicht es aus, eine Msgbox in das Makro zu setzen.

Im untenstehenden Beispiel finden Sie das Beispiel und 3 Testdateien.

Nat�rlich k�nnte man den Namen des zu startenden Makros
abh�ngig vom Dateinamen festlegen.
Dazu w�rde es ausreichen eine entsprechende Abfrage in
der Routine "SymbolMakro�ndern" einzubauen.

Ein Anwendungsbeispiel k�nnte sein,
wenn Sie regelm��ig mit verschiedenen Dateien arbeiten,
die unterschiedliche Routinen beinhalten.
Sie m�ssen sich dazu nicht unbedingt mehrere Symbole in einer
Symbolleiste anlegen, sondern nur dieses eine.
Je nach ge�ffneter Datei wird die entsprechend richtige Routine gestartet.

Um die Sache perfekt zu gestalten, k�nnte man mit Hilfe der VBE-Programmierung
vor dem �ndern der "OnAction" Eigenschaft pr�fen, ob sich das entsprechende
Makro �berhaupt in der ge�ffneten Datei befindet.
Falls dies nicht der Fall ist, weist man einfach ein Makro zu,
welches dies in Form einer entsprechenden Meldung dem Benutzer mitteilt.


Download - 14 KB