Aktuelle Seite:
/vba/vbahidesym.htm
Letzte Änderung: 24.06.2006

Getestet unter Word2000Getestet unter WordXPGetestet unter Word2003  
Makro/Datei speichern
Print

Es gibt in Word ein paar Symbolleisten, die sich immer wieder einblenden, auch wenn man sie immer wieder ausblendet. Dazu gehört z.B die Symbolleiste "Web".
Diese wird immer dann eingeblendet, wenn man auf einen Hyperlink klickt oder mit mehreren Dokumenten gleichzeitig arbeitet.
Andere Symbolleisten lassen sich überhaupt nicht löschen ohne die gesamte Funktionalität zu verlieren; so lässt sich z.B. die Symbolleiste von "Adobe Acrobat" nicht dauerhaft ausblenden oder gar komplett löschen.

In diesen Fällen muss man sich etwas mit den Word-internen Ereignissen auseinandersetzen, die beim Öffnen von Dokumenten, Wechseln zwischen Dokumenten etc. ablaufen.
Diese Ereignisse können in einem Klassenmodul abgefangen werden und dann kann darauf reagiert werden.

Dazu muss in der Normal.dot oder einer anderen als AddIn geladenen Dokumentvorlage ein neues Klassenmodul mit dem Namen "cls_App" angelegt werden.

Wichtig ist dabei die Zeile:

Public WithEvents App As Word.Application  

da erst dadurch der Objekt-Variablen App die Word-Ereignisse zugänglich gemacht werden.

In dem Klassenmodul wird dann auf folgende Word-Ereignisse reagiert:

Option Explicit  
' Blendet die Symbolleiste "Web" aus  
'  
Public WithEvents App As Word.Application  

Private Sub App_WindowActivate(ByVal Doc As Document, ByVal Wn As Window) ' Aktivieren eines Word-Fensters fkt_InVisible "Web", False End Sub
Private Sub App_DocumentOpen(ByVal Doc As Document) ' Dokument öffnen fkt_InVisible "Web", False End Sub
Private Sub App_NewDocument(ByVal Doc As Document) ' Neues Dokument fkt_InVisible "Web", False End Sub
Private Sub App_DocumentChange() ' Wechseln des Document-Focus fkt_InVisible "Web", False End Sub
Function fkt_InVisible(strSymL As String, bVisible As Boolean) Dim myCB As CommandBar For Each myCB In App.CommandBars If myCB.Visible = Not bVisible Then If myCB.Name = strSymL Then myCB.Visible = bVisible: Exit For End If End If Next myCB End Function

Damit Word überhaupt mitbekommt, dass dieses Klassenmodul existiert und bei den entsprechenden Ereignissen diese Makros aufruft, wird das AutoExec-Makro verwendet, um beim Word-Start das Klassenmodul zu initialisieren.
Der VBA-Code sieht dann folgendermaßen aus:

Dim c_App As New cls_App  
Sub AutoExec()  
Set c_App.App = Word.Application  
End Sub  

Mit diesem Gerüst wird beim Erstellen eines neuen Dokuments, beim Wechseln zwischen Dokumenten oder beim Öffnen eines Dokuments geprüft, ob die Symbolleiste angezeigt wird. Wenn ja, dann wird sie ausgeblendet und die ÜÜberprüfung beendet.

Mit diesem Satz an Word-Ereignissen wird die Symbolleiste zu 99% der Fälle ausgeblendet, sofern Makros aktiviert und ausgeführt werden.


Wird in obigen Beispielen dem Funktionsaufruf der Name der Acrobat-Symbolleiste ("PDFMaker 5.0" bzw. "PDFMaker 6.0") mitgegeben, wird versucht diese Symbolleiste auszublenden.


Sofern allerdings bei der Verarbeitung (anderer) Makros ein Fehler auftritt kann es passieren, dass auch das Klassenmodul nicht mehr richtig in Word initialisiert ist und auf die Ereignisse nicht mehr reagiert wird. In diesem Fall muss das AutoExec-Makro noch einmal manuell ausgeführt werden. 


 www.chf-online.de/vba/vbahidesym.htm © 2001-11 Christian Freßdorf (Zaphod-Systems)