2
www.ChF-Online.de  

Symbol dynamisch mit Makro und TastenKürzel belegen

   Neuigkeiten
   API-Aufrufe in VBA
   VBA2HTML
   Word
   Word-VBA
 Verschiedenes
 Feld-Arbeiten
 Form-Sachen
aktiv aktiv Menü-/Symbolleisten
aktiv  Dynamische Symbole
 Symbolleisten ausblenden
 Menümakros identifizieren
 Menüleisten (I)
 Menüleisten (II)
 Menü-/Symbolleisten-Schutz
 Gruppenschaltflächen
 VBA und Lotus Notes
 VBA und Mail
 Inside VBAIDE
 Von Word nach Outlook
 Fix-und-Fertiges/Projekte
   Word2007 (RibbonX)
   Word2010 (RibbonX)
   Outlook-VBA
   Links zu VB(A)
   DocToHelp
   Netport Express XL
   Astronomie
   Gästebuch
   Volltextsuche
   Sitemap
   Buch:Word-Programmierung
   Impressum & Kontakt
   Datenschutzerklärung
Getestet unter Word97Getestet unter Word2000  
Makro/Datei speichern
Print

Dieses Makro entstand aufgrund einer Anfrage in der NG, ob man ein ausgeführtes Makro einfach wiederholen kann. Dieses ist z.B. für den letzten Befehl möglich.
Leider lässt sich dieser Befehl nicht auf Makros anwenden, so dass ich einen kleinen Workaround geschrieben habe:

In einer Funktion wird ein neues Symbol in die Symbolleiste "Standard" eingefügt und mit dem Aufruf eines Makros hinterlegt. Gleichzeitig wird diesem Symbol ein Tastenkürzel zugewiesen. Im Tooltipp wird dann sowohl der Makroname als auch das Tastenkürzel angezeigt. Da letzteres leider nicht automatisch erfolgt, auch wenn die entsprechende Option gesetzt ist, wird beides manuell in den Tooltipptext geschrieben.

Der Aufruf erfolgt dann folgendermaßen:
Zuerst wird die Funktion mit dem Makronamen als Übergabeparameter aufgerufen (Zeile 3), danach folgt der eigentlich Makrocode.

1    Sub Testaufruf() 
2    ' Aufruf der Funktion mit Makroname 
3    Tastenkürzel ("Testaufruf")
4    MsgBox "Hier steht der Makrocode"
5    End Sub 

In der Funktion  Tastenkürzel wird in der Symbolleiste "Standard" zuerst nach einer vorhandenen Schaltfläche mit der ID=1 und dem Tag="Testmakro" gesucht. Ist sie vorhanden, wird der OnAction-Eigenschaft der im Aufruf angegebene Makroname zugewiesen (Zeile  13). Ist sie nicht vorhanden, wird sie ans Ende der Symbolleiste eingefügt. Dabei werden die .Tag-Eigenschaft und das angezeigte Symbol (FaceID) gesetzt.
Anschließend wird ein festes Tastenkürzel Ctrl+Shift+U (Zeile  16) diesem Symbol und somit dem aktuellen Makro zugewiesen.
Zum Schluss wird der ToolTippText mit dem verwendeten Tastenkürzel gesetzt.

1    Function Tastenkürzel(sMakro) 
2    Dim myctrl As CommandBarControl
3    Dim myctrlbar As CommandBar
4    Set myctrlbar = CommandBars("Standard")
5    Set myctrl = myctrlbar.FindControl(Type:=msoControlButton, ID:=1, _
         Tag:="Testmakro")
6    If myctrl Is Nothing Then 
7        Set myctrl = CommandBars("Standard").Controls.Add _
             (Type:=msoControlButton, ID:=1)
8        myctrl.BeginGroup = True 
9        myctrl.Tag = "Testmakro"
10       myctrl.FaceId = 99
11   End If 
12   ' Aktion der Schaltfläche zuweisen 
13   myctrl.OnAction = sMakro
14   myctrl.Caption = sMakro
15   ' Definiert das Tastenkürzel und weist es dem jeweiligen Makro zu 
16   KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, _
         wdKeyShift, wdKeyU), KeyCategory:=wdKeyCategoryMacro, _
         Command:=sMakro
17   ' Hier steht das Tastenkürzel im Tooltipp 
18   myctrl.TooltipText = sMakro & " (Ctrl+Shift+U)"
19   End Function 

Die folgende Funktion löscht das Symbol in der Symbolleiste und setzt die Variablen zurück. Diese Funktion sollte verwendet werden, um das System wieder in einen klaren Zustand zurückzusetzen, wenn das Symbol nicht mehr verwendet wird.

1    Function Tastenkürzellöschen() 
2    Dim myctrl As CommandBarControl
3    Dim myctrlbar As CommandBar
4    Set myctrlbar = CommandBars("Standard")
5    Set myctrl = myctrlbar.FindControl(Type:=msoControlButton, ID:=1, _
         Tag:="Testmakro")
6    If Not myctrl Is Nothing Then 
7        myctrl.Delete
8        Set myctrl = Nothing 
9        Set myctrlbar = Nothing 
10   End If 
11   End Function 

 Besucher: 1 online  |  99 heute  |  3597 diesen Monat  |  2150974 insgesamt | Seitenaufrufe: 84   Letzte Änderung: 24.06.2006 © 2001-18 Christian Freßdorf
  In Begriffen denken, in Kategorien einteilen, das ist so automatisch wie Luftholen.
Wolf Biermann
 powered by phpCMS and PAX