Menüeintrag auf Existenz prüfen

22/02/2008 - 09:31 von Juergen Grieb | Report spam
Hallo,

ich setze in meinem Programm verschiedene Menüeintràge auf Grau, damit
der Benutzer sie nicht auswàhlen kann:

With wrd.CommandBars("Menu Bar").Controls("&Datei")
.Controls("&Neu...").Enabled = False
End With

Wenn nun ein Benutzer sein Word so modifiziert hat, dass dieser
Menüeintrag bei ihm gar nicht vorhanden ist, bricht mein Programm mit
einer Fehlermeldung ab.

Gibt es eine Möglichkeit abzufragen, ob ein Menüeintrag vorhanden ist
(unabhàngig davon, ob er gerade aktiviert ist oder nicht?

Gruß Jürgen
 

Lesen sie die antworten

#1 Thomas Gahler
22/02/2008 - 11:59 | Warnen spam
Hallo Jürgen

Gibt es eine Möglichkeit abzufragen, ob ein Menüeintrag vorhanden ist
(unabhàngig davon, ob er gerade aktiviert ist oder nicht?


Deine Frage ist eigentlich falsch gestellt. Sie müsste eher heissen, wie
finde ich *alle* Menüeintràge und Symbolleistenschaltflàchen, egal wie
extrem der Anwender seine Oberflàche umgestellt hat.


Also habe ich kurz gegoogelt und nur eine gleiche Anfrage von mir gefunden,
die damals nicht beantwortet wurde bzw. der Code dazu wurde nie produziert.
Jetzt ist der Code da ;-)

'
Option Explicit

Sub Demo()
procCommandBarControlÄndern _
lngControlID:, _
bStatusEnabled:=True
End Sub

Public Sub procCommandBarControlÄndern( _
lngControlID As Long, _
bStatusEnabled As Boolean)

Dim cbar As Office.CommandBar
Dim cbarc As Office.CommandBarControl

'Alle Symbolleisten untersuchen
For Each cbar In Application.CommandBars
For Each cbarc In cbar.Controls
'Falls ein Untermenü, dieses untersuchen
If cbarc.Type = msoControlPopup Then
procCommandBarControlÄndernA _
cbarcBasis:=cbarc, _
lngControlID:=lngControlID, _
bStatusEnabled:=bStatusEnabled
'Eintrag auf der Symbolleiste
ElseIf cbarc.ID = lngControlID Then
cbarc.Enabled = bStatusEnabled
End If
Next cbarc
Next cbar
End Sub

Private Sub procCommandBarControlÄndernA( _
cbarcBasis As Office.CommandBarControl, _
lngControlID As Long, _
bStatusEnabled As Boolean)

Dim cbarc As Office.CommandBarControl

For Each cbarc In cbarcBasis.Controls
'Falls ein Untermenü, dieses ebenfalls untersuchen
'(rekursiver Aufruf)
If cbarc.Type = msoControlPopup Then
procCommandBarControlÄndernA _
cbarcBasis:=cbarc, _
lngControlID:=lngControlID, _
bStatusEnabled:=bStatusEnabled
'Eintrag auf dem Untermenü
ElseIf cbarc.ID = lngControlID Then
cbarc.Enabled = bStatusEnabled
End If
Next cbarc
End Sub

'


Aber Achtung dein Anwender kann jetzt immer noch Ctrl+N drücken und kriegt
ein neues Dokument. Falls das auch nicht sein darf, dann musst du zusàtzlich
ein kleines Makro anlegen.

Public Sub FileNew()
Beep
Application.StatusBar = "Gesperrt"
End Sub




Thomas Gahler
MVP für WordVBA
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows XP (SP2), Office XP (SP3)

Ähnliche fragen