none
Office Befehle überschreiben (Office 2003) RRS feed

  • Allgemeine Diskussion

  • Office Befehle überschreiben (Office 2003)
    Hintergrund
    Es besteht die Möglichkeit in Office 2000 - 2003 mit Hilfe der VBA die Befehle aus der Befehlsliste zu:
    -      überschreiben
    -      unsichtbar machen
    -      deaktivieren
    Problemstellung
    Ich möchte einen Befehl in Word 2003 überschreiben. Ich möchte - sagen wir mal - der „Fett“ Befehl überschreiben.
    Wie schafft man das
    Es gibt drei VBA Methoden:
     
    Methode 1
    Man könnte anhand der ID des Befehls das entsprechende CommandBarControl Objekt erstellen und die OnAction Eigenschaft des Objektes neu definieren.
    Sub OverrideBoldCommand()
        Dim c As Object
        
        'ID fuer 'Fett' in der Befehlsleiste ist 113
        Set c = Application.CommandBars.FindControl(, 113)
        c.OnAction = "MyBold"
    End Sub
    
    Sub MyBold()
        MsgBox "Meine 'Fett' Aktion!"
    End Sub
    
    

     
    Und ähnlich kann man diese Überschreibung programmatisch zurücksetzen:
    Sub UndoOverride()
        Dim c As Object
        
        'ID fuer 'Fett' in der Befehlsleiste ist 113
        Set c = Application.CommandBars.FindControl(, 113)
        c.OnAction = ""
    End Sub
    

     
    Wichtig! Auf diese Weise wird die Befehlsänderung Applikationsweit wirksam. Deshalb sollte die neu-definierte OnAction Prozedur immer zur Verfügung stehen (in der Normal.dot z.B.)
     
    Methode 2
    Man könnte auch anhand der ID des Befehls das entsprechende CommandBarButton Objekt mit der WithEvents Option erstellen und die MyCommand_Click Ereignis des Objektes belegen.
    Dim WithEvents c As CommandBarButton
    
    Sub OverrideBoldCommand()
        'ID fuer 'Fett' in der Befehlsleiste ist 113
        Set c = Application.CommandBars.FindControl(, 113)
    End Sub
    
    Private Sub c_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
        'ich unterbinde das normale Ergebnis des Befehls
        CancelDefault = True
        'tue ich was anderes
        MsgBox "Meine 'Fett' Aktion!"
    End Sub
    

     
    Programmatisches Zurücksetzen dieser Überschreibung wird einfach gemacht:
    Sub UndoOverride()
        Set c = Nothing
    End Sub
    

     
    Wichtig! Auf diese Weise wird die Befehlsänderung Instanzweit wirksam. Wenn man diese Word Instanz schließt, wird CommandBarButton Objekt entkräftet.
                                                                                                
    Methode 3
    Man könnte direkt die Funktion für „Fett“ belegen. Diese Funktion heißt „Bold“:
    Sub Bold()
        MsgBox "Meine 'Fett' Aktion!"
    End Sub
    

     
    Programmatisches Zurücksetzen ist hier nicht möglich.
     Wichtig! Auf diese Weise wird die Befehlsänderung nur Dokumentweit wirksam. Wenn man jetzt ein weiteres Dokument öffnet, ist der überschriebene Befehl nicht verändert.

    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Donnerstag, 8. Dezember 2011 09:45