2
www.ChF-Online.de  

Rund um die Menüleisten (I)

   Neuigkeiten
   API-Aufrufe in VBA
   VBA2HTML
   Word
   Word-VBA
 Verschiedenes
 Feld-Arbeiten
 Form-Sachen
aktiv aktiv Menü-/Symbolleisten
 Dynamische Symbole
 Symbolleisten ausblenden
 Menümakros identifizieren
aktiv  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

Die Menüleiste in Word ist eine besondere Darstellung der Symbolleisten, wird aber genauso über das CommandBars-Objekt angesprochen. Der Zugriff auf die Menüleiste erfolgt über den Namen "Menu Bar".
Das folgende Beispiel blendet die Menüleiste aus und wieder ein:

Sub MNU_AusEinblenden()
Dim cbmnu As CommandBar 
Set cbmnu = CommandBars("Menu Bar")
cbmnu.Enabled = False 
cbmnu.Enabled = True 
End Sub  

Anmerkung
Sollte beim Start von Word die Menüleiste nicht angezeigt werden und auch obiges Makros dieses nicht beheben, kann es daran liegen, dass ein Makro verwendet wird, in dem Word maximiert wurde, bevor es angezeigt wird.
Um die Menüleiste (und ggf. Symbolleisten) wieder einzublenden, sollte folgende Reihenfolge verwendet werden:

Dim oWord As Word.Application
Set oWord = New Word.Application
oWord.Visible = True 
oWord.WindowState = wdWindowStateMaximize 
Set oWord = Nothing 

Innerhalb der Menüleiste können die Menüeinträge über das CommandBar-Control angesprochen werden.
Das folgende Beispiel zeigt alle Menüeinträge in einer Messagebox an:


Beispiel
Sub Menuleisteneinträge()  
Dim cbmnu As CommandBar 
Dim ctlmnu As CommandBarControl 
Dim msg, antw As String 
Set cbmnu = CommandBars("Menu Bar")
For Each ctlmnu In cbmnu.Controls
  msg = msg & ctlmnu.Caption & vbCrLf 
Next ctlmnu
antw = MsgBox(msg, vbInformation, "Menüeinträge")
End Sub 

Die einzelnen Menüpunkte eines Menüeintrages werden wiederum als CommandBar-Controls des jeweiligen Menüeintrages angesprochen.
Das folgende Beispiel zeigt all diejenige Einträge des Menüeintrages "Ansicht" an, die aktiviert (ctlmnu.Enabled = True) und sichtbar (ctlmnu.Visible = True) sind:


Beispiel
Sub Menupunkte()  
Dim cbmnu As CommandBar 
Dim ctlmnu As CommandBarControl 
Dim msg, antw As String 
Set cbmnu = CommandBars("Menu Bar")
For Each ctlmnu In cbmnu.Controls("&Ansicht").Controls
  If ctlmnu.Enabled = True And ctlmnu.Visible = True Then 
    msg = msg & ctlmnu.Caption & vbCrLf 
  End If 
Next ctlmnu
antw = MsgBox(msg, vbInformation, "Menüpunkte: Ansicht")
End Sub 

Ein bestimmter einzelner Menüpunkt wird entweder über den Menü-Index oder den korrekten Namen angesprochen. Besitzt ein Menüpunkt weitere Unterpunkte, können diese ebenfalls als CommandBar-Controls angesprochen werden, auch wenn in diesen Fällen die Intellisense-Hilfe der IDE diese Methode nicht anbietet.
Das folgende Beispiel gibt den Namen des Menüpunkts Makro -> Makros... aus dem Menü Extras zurück.


Beispiel
Sub MenuPunktAnsprechen()  
Dim cbmnu As CommandBar 
Dim ctlmnu As CommandBarControl 
Dim ctlumnu As CommandBarControl 
Dim msg, antw As String 
Set cbmnu = CommandBars("Menu Bar")
Set ctlmnu = cbmnu.Controls("Extras").Controls("Makro")
Set ctlumnu = ctlmnu.Controls("Makros...")
msg = ctlumnu.Caption
antw = MsgBox(msg, vbInformation, "Menüpunkt: " & ctlmnu.Caption)
End Sub 

Mit obiger Methode lässt sich relativ einfach ein bestimmter bekannter Menüpunkt ermitteln. Will man wissen, ob dieser Eintrag existiert, setzt man einen Verweis auf dieses Objekt und prüft das Ergebnis. Wird ein Nothing" zurückgeliefert, ist der Eintrag nicht vorhanden. Anderenfalls lässt sich mit diesem Verweis weiterarbeiten (siehe nächstes Beispiel).

Sucht man einen bestimmten Menüeintrag/-punkt, gibt es mehrere Möglichkeiten.
Ist nur der Name bekannt, bleibt einem nichts anderes übrig, als alle Menüeinträge zu durchlaufen und jeden Eintrag mit dem Namen zu vergleichen.
Ist aber z.B. die ID oder die Tag-Angabe bekannt, kann die FindControl-Methode verwendet werden.
Im folgenden Beispiel wird nach einem Menüpunkt mit der ID=3 gesucht. Wird ein solches gefunden, dann wird der Name des Menüpunkts sowie der Name des Menüeintrags angegebe, in der sich der Mneüpunkt befindet. Existiert kein solcher Menüpunkt, besitzt die Variable ctlmnu den Wert Nothing und es wird ein entsprechender Hinweis ausgegeben.


Beispiel
Sub MnuSuchen()  
Dim ctlmnu As CommandBarControl 
Dim iID As Integer 
Dim msg, antw As String 
iID = 3
Set ctlmnu = CommandBars("Menu Bar").FindControl(ID:=iID, Recursive:=True)
If ctlmnu Is Nothing Then 
  msg = "Es wurde kein Eintrag mit der ID=" & iID & " gefunden."
Else 
  msg = "Menüpunkt '" & ctlmnu.Caption & "'" & vbCrLf & "im Menüeintrag '" & _
    ctlmnu.Parent.NameLocal & "'" & vbCrLf & "besitzt die ID=" & iID & "."
End If 
antw = MsgBox(msg, vbInformation, "Info")
End Sub 

Anmerkung:
Mit der Eigenschaft NameLocal wird der Name des Menüeintrags in der jeweiligen Spracheinstellung zurückgeliefert.

Weiter (Teil II) >>


 Besucher: 41 online  |  145 heute  |  2799 diesen Monat  |  1584638 insgesamt | Seitenaufrufe: 65   Letzte Änderung: 24.06.2006 © 2001-14 Christian Freßdorf
  Das Leben ist weder einfach noch verzwickt, weder klar noch dunkel, weder widerspruchsvoll noch zusammenhängend. Das Leben ist. Die Sprache allein ordnet oder verwirrt es, erhellt oder verdunklet es, zerstreut oder vereinigt es.
Antoine de Saint-Exupéry
 powered by phpCMS and PAX