Mehr zum Thema Programmierung mit den Microsoft Office-Befehlsleisten
Veröffentlicht: 23. Sep 2002 | Aktualisiert: 22. Jun 2004
Von Paul Cornell
In der Kolumne des vorigen Monats habe ich Ihnen die Befehlsleisten vorgestellt. Dabei handelt es sich um Komponenten der Benutzeroberfläche, die im gesamten Microsoft Office-Paket zum Durchführen von Aktionen in Office-Anwendungen verwendet werden. Aufgrund der Rückmeldungen zur Kolumne des vorigen Monats möchte ich Ihnen hiermit einige zusätzliche Informationen und Codebeispiele für spezielle Probleme bei Befehlsleisten geben:
Auf dieser Seite
Befehlsleisten und das Outlook-Objektmodell
Hinzufügen von benutzerdefinierten Bildern zu den Schaltflächen der Befehlsleisten
Hinzufügen von Kombinationsfeldern zu Befehlsleisten
Deaktivieren und Ausblenden von Befehlsleisten und Steuerelementen der Befehlsleisten
Positionieren der Befehlsleisten
Dynamisches Hinzufügen und Löschen von Befehlsleisten
Die Subroutinen "CommandBarDocumenter" und "CommandBarControlDocumenter"
Befehlsleisten und das Outlook-Objektmodell
In der Kolumne des vorigen Monats habe ich nicht erwähnt, dass sich der Zugriff auf die Befehlsleisten und Steuerelemente der Befehlsleisten im Microsoft Outlook-Objektmodell geringfügig vom Zugriff mit anderen Microsoft Office-Anwendungen unterscheidet.
In anderen Anwendungen als Outlook verwenden Sie für den Zugriff auf Befehlsleisten folgenden oder vergleichbaren Code:
Public Sub ListCommandBarNames() ' Zweck: Listet sämtliche Befehlsleistennamen für die aktuelle Anwendung auf. ' Anmerkung: Dieser Code funktioniert in Outlook nicht! Dim objCommandBar As Office.CommandBar For Each objCommandBar In Application.CommandBars Debug.Print objCommandBar.Name Next objCommandBar End Sub
Wenn Sie jedoch versuchen, diesen Code in Outlook zu verwenden, erhalten Sie einen Laufzeitfehler. Stattdessen müssen Sie die CommandBars-Eigenschaft im Explorer- oder Inspector-Objekt wie folgt verwenden:
Public Sub ListOutlookExplorerCommandBarNames() ' Zweck: Listet sämtliche Befehlsleistennamen für den aktuellen Explorer auf. ' Anmerkung: Dieser Code funktioniert nur in Outlook! Dim objCommandBar As Office.CommandBar For Each objCommandBar In Application.ActiveExplorer.CommandBars Debug.Print objCommandBar.Name Next objCommandBar End Sub
Ersetzen Sie im vorhergehenden Codebeispiel den Code ActiveExplorer durch ActiveInspector, um alle Befehlsleistennamen für den aktiven Inspektor zu drucken. Falls Sie mit dem Outlook-Objektmodell nicht vertraut sind: Ein Explorer stellt die Outlook-Benutzeroberfläche dar. Ein Inspektor ist ein Fenster, das ein bestimmtes Outlook-Element (z.B. eine E-Mail-Nachricht oder einen Kontakt) enthält, sowie alle Registerkarten innerhalb des Outlook-Elements (z.B. die Registerkarte Details einer Aufgabe).
Hinzufügen von benutzerdefinierten Bildern zu den Schaltflächen der Befehlsleisten
Sie können zwar mit der FaceId-Eigenschaft des CommandBarButton-Objekts anhand eines im Lieferumfang von Office enthaltenen Bildes ein Bild für die Schaltfläche einer Befehlsleiste festlegen. Wenn Sie jedoch ein selbst erstelltes Bild einfügen möchten, verwenden Sie die Picture-Eigenschaft des CommandBarButton-Objekts. Mit der Mask-Eigenschaft des CommandBarButton-Objekts können Sie zudem ein benutzerdefiniertes transparentes Bild erstellen.
Auch wenn zahlreiche Bildbearbeitungsprogramme als Share- oder Freeware im Web verfügbar sind und Programme wie beispielsweise Microsoft Visual C++ erhältlich sind, ist für die Erstellung dieser Bilder Microsoft Paint völlig ausreichend. So erstellen Sie die Bilder mit Paint:
Klicken Sie auf Start, zeigen Sie auf Programme und anschließend auf Zubehör. Klicken Sie danach auf Paint.
Klicken Sie im Menü Bild auf Attribute.
Geben Sie im Feld Breite den Wert 16 ein. Geben Sie im Feld Höhe den Wert 16 ein. Stellen Sie sicher, dass die Optionen Pixel und Farben ausgewählt sind, und klicken Sie auf OK.
Zeigen Sie im Menü Ansicht auf Zoomfaktor, und klicken Sie auf Benutzerdefiniert.
Klicken Sie auf 800% und anschließend auf OK.
Zeigen Sie im Menü Ansicht auf Zoomfaktor, und klicken Sie auf Raster einblenden.
Stellen Sie im Menü Ansicht sicher, dass die Befehle Toolbox und Farbpalette aktiviert sind.
Erstellen Sie das Bild mithilfe der Steuerelemente Toolbox und Farbpalette.
Wenn Sie das Bild erstellt haben, klicken Sie im Menü Datei auf Speichern.
Speichern Sie das Symbol als 256-Farben-Bitmap.
Nachstehend finden Sie ein von mir erstelltes Beispielbild:
Abbildung 1. Benutzerdefiniertes undurchsichtiges Bitmap
Um ein durchsichtiges Bild anzulegen, müssen Sie eine entsprechende Bildmaske erstellen. Speichern Sie hierfür das soeben erstellte Bild unter einem anderen Namen. Färben Sie jedes Pixel, das durchsichtig werden soll, weiß. Färben Sie jedes Pixel, das undurchsichtig werden soll, schwarz. Speichern Sie anschließend das Bild erneut. Nachstehend finden Sie eine von mir erstellte Beispielbildmaske:
Abbildung 2. Benutzerdefinierte Bitmapmaske
Mit folgendem Beispielcode können Sie das transparente Bild der Schaltfläche für die Befehlsleiste hinzufügen:
Public Sub NewPictureOnNewCommandBar() ' Zweck: Fügt ein Bild einer Schaltfläche der Befehlsleiste hinzu. Dim objCommandBar As Office.CommandBar Dim objCommandBarButton As Office.CommandBarButton Dim objPicture As stdole.IPictureDisp ' Die nächste Codezeile auskommentieren, wenn Sie kein transparentes Bild einfügen möchten. Dim objMask As stdole.IPictureDisp Const PICTURE_PATH As String = "C:\Eigene Bilder\OK.bmp" ' Die nächste Codezeile auskommentieren, wenn Sie kein transparentes Bild einfügen möchten. Const PICTURE_MASK As String = "C:\Eigene Bilder\OKMask.bmp" Const COMMAND_BAR_NAME As String = "Befehlsleiste testen" ' Die nächste Zeile ersetzen durch: ' For Each objCommandBar In Application.ActiveExplorer.CommandBars <- Für Outlook ' For Each objCommandBar In Application.VBE.CommandBars <- Für Visual Basic-Editor For Each objCommandBar In Application.CommandBars If objCommandBar.Name = COMMAND_BAR_NAME Then objCommandBar.Delete End If Next objCommandBar Set objCommandBar = Application.CommandBars.Add(COMMAND_BAR_NAME) Set objCommandBarButton = _ objCommandBar.Controls.Add(msoControlButton) Set objPicture = LoadPicture(PICTURE_PATH) ' Die nächste Codezeile auskommentieren, wenn Sie kein transparentes Bild einfügen möchten. Set objMask = LoadPicture(PICTURE_MASK) objCommandBarButton.Picture = objPicture ' Die nächste Codezeile auskommentieren, wenn Sie kein transparentes Bild einfügen möchten. objCommandBarButton.Mask = objMask End Sub
Wie Sie aus dem vorhergehenden Code ersehen können, legen Sie im Code ein Objekt für das undurchsichtige Bild und ein Objekt für die Bildmaske an. Jedes Objekt muss den Typ stdole.IPictureDisp aufweisen. Als Nächstes initialisieren Sie diese beiden Objekte, indem Sie die LoadPicture-Methode der Objekte aufrufen. Zuletzt legen Sie in der Picture-Eigenschaft der Befehlsleistenschaltfläche das undurchsichtige Bildobjekt fest. Anschließend setzen Sie die Mask-Eigenschaft des Schaltflächenobjekts der Befehlsleiste auf die Bildmaske.
Das Endergebnis sieht für undurchsichtige und durchsichtige Bilder wie folgt aus:
Abbildung 3. Undurchsichtige und durchsichtige Bilder auf einer Befehlsleistenschaltfläche
Verwechseln Sie hierbei nicht die FaceId-Eigenschaft des CommandBarButton-Objekts mit der Id-Eigenschaft des CommandBarButton-Objekts. Mit der Id-Eigenschaft wird die integrierte Aktion für das entsprechende Steuerelement der Befehlsleiste festgelegt. Der Standardwert für die Id-Eigenschaft für alle benutzerdefinierten Steuerelemente der Befehlsleiste ist 1. Wenn Sie die Id-Eigenschaft eines benutzerdefinierten Steuerelements einer Befehlsleiste auf einen anderen Wert als 1 setzen, wird für das benutzerdefinierte Steuerelement der Befehlsleiste eine integrierte Aktion festgelegt, falls für die ID in der Anwendung eine solche existiert. Im folgenden Code werden sämtliche IDs für alle Steuerelemente einer Befehlsleiste in der Anwendung aufgeführt:
Public Sub ListCommandBarControlIDs() ' Zweck: Listet sämtliche Steuerelement-IDs der Befehlsleiste ' für die aktuelle Anwendung auf. Dim objCommandBar As Office.CommandBar Dim objCommandBarControl As Office.CommandBarControl ' Die folgende Zeile ersetzen durch: ' For Each objCommandBar In Application.ActiveExplorer.CommandBars <- Für Outlook ' For Each objCommandBar In Application.VBE.CommandBars <- Für Visual Basic-Editor For Each objCommandBar In Application.CommandBars For Each objCommandBarControl In objCommandBar.Controls Debug.Print objCommandBarControl.Caption & " " & _ objCommandBarControl.ID Next objCommandBarControl Next objCommandBar End Sub
Hinzufügen von Kombinationsfeldern zu Befehlsleisten
Zum Hinzufügen eines Kombinationsfelds zu einer Befehlsleiste verwenden Sie die Add-Methode der CommandBarControls-Auflistung und fügen dabei die enumerierte msoControlComboBox-Konstante für das Type-Argument ein. Fügen Sie anschließend mit der AddItem-Methode des CommandBarComboBox-Objekts Optionen zum Kombinationsfeld hinzu.
Mit der folgenden Funktion wird ein Kombinationsfeld einer bestehenden Befehlsleiste hinzugefügt:
Public Function AddComboBoxToCommandBar(ByVal strCommandBarName As String, _ ByVal strComboBoxCaption As String, _ ByRef strChoices() As String) As Boolean ' Zweck: Fügt einer Befehlsleiste ein Kombinationsfeld hinzu. ' Akzeptiert: ' strCommandBarName: Der Name der Befehlsleiste zum Hinzufügen des Kombinationsfeldes. ' strChoices(): Ein Optionsarray für das Kombinationsfeld. ' Rückgabe: TRUE, wenn das Kombinationsfeld erfolgreich der Befehlsleiste hinzugefügt wurde. Dim objCommandBarControl As Office.CommandBarControl Dim objCommandBarComboBox As Office.CommandBarComboBox Dim varChoice As Variant On Error GoTo AddComboBoxToCommandBar_Err ' Alle zuvor hinzugefügten Instanzen dieses Kombinationsfeldes löschen. ' Die nächste Codezeile ersetzen durch: ' For Each objCommandBarControl In _ ' Application.ActiveExplorer.CommandBars.Item(strCommandBarName).Controls _ <- Für Outlook ' For Each objCommandBarControl In _ ' Application.VBE.CommandBars.Item(strCommandBarName).Controls _ <- Für Visual Basic-Editor For Each objCommandBarControl In Application.CommandBars.Item(strCommandBarName).Controls If objCommandBarControl.Caption = strComboBoxCaption Then objCommandBarControl.Delete End If Next objCommandBarControl ' Das Kombinationsfeld erstellen. ' Die nächste Codezeile ersetzen durch: ' Set objCommandBarComboBox = _ ' Application.CommandBars.Item(strCommandBarName).Controls.Add(msoControlComboBox) _ <- Für Outlook ' Set objCommandBarComboBox = _ ' Application.CommandBars.Item(strCommandBarName).Controls.Add(msoControlComboBox) _ <- Für Visual Basic-Editor Set objCommandBarComboBox = _ Application.CommandBars.Item(strCommandBarName).Controls.Add(msoControlComboBox) objCommandBarComboBox.Caption = strComboBoxCaption For Each varChoice In strChoices objCommandBarComboBox.AddItem varChoice Next varChoice AddComboBoxToCommandBar_End: AddComboBoxToCommandBar = True Exit Function AddComboBoxToCommandBar_Err: AddComboBoxToCommandBar = False End Function
Sie können diese Funktion mit folgendem oder ähnlichem Code testen:
Public Sub TestAddComboBoxToCommandBar() ' Zweck: Testet die AddComboBoxToCommandBar-Funktion. Dim strChoices(4) As String strChoices(1) = "Vanilla" strChoices(2) = "Chocolate" strChoices(3) = "Strawberry" strChoices(4) = "Other" If AddComboBoxToCommandBar("Tools", "Favorite Ice Cream", _ strChoices) = True Then MsgBox "Das Kombinationsfeld wurde erfolgreich hinzugefügt." Else MsgBox "Das Kombinationsfeld konnte nicht hinzugefügt werden." End If End Sub
Deaktivieren und Ausblenden von Befehlsleisten und Steuerelementen der Befehlsleisten
Bei der Entwicklung von Office-Lösungen möchten Sie unter Umständen verhindern, dass Benutzer auf bestimmte Befehlsleisten und Steuerelemente von Befehlsleisten klicken, die Bestandteil der Lösung sind. Möglicherweise sollen die Benutzer z.B. nicht auf Steuerelemente auf der Symbolleiste Formulare klicken und damit ein von Ihnen in Microsoft Word erstelltes benutzerdefiniertes Formular ändern können. Vielleicht möchten Sie auch im Menü Extras den Befehl Makro für eine bestimmte Lösung deaktivieren.
Zum Deaktivieren einer Befehlsleiste oder eines Steuerelements einer Befehlsleiste setzen Sie die Enabled-Eigenschaft einer Befehlsleiste oder eines entsprechenden Steuerelements auf FALSE. Wenn Sie die Befehlsleiste oder das Steuerelement der Befehlsleiste wieder aktivieren möchten, setzen Sie die Enabled-Eigenschaft hierfür auf TRUE.
Zum Ausblenden einer Befehlsleiste oder eines Steuerelements einer Befehlsleiste setzen Sie die Visible-Eigenschaft einer Befehlsleiste oder eines entsprechenden Steuerelements auf FALSE. Wenn Sie die Befehlsleiste oder das Steuerelement der Befehlsleiste wieder anzeigen möchten, setzen Sie die Visible-Eigenschaft hierfür auf TRUE.
Dies können Sie ausprobieren, indem Sie im Direktfenster folgende Codezeilen eingeben. Mit jeder Codezeile wird der aktivierte oder sichtbare Status der angegebenen Befehlsleiste bzw. des angegebenen Steuerelements der Befehlsleiste umgeschaltet. Verwenden Sie die Nomenklatur Application.ActiveExplorer oder Application.VBE, wenn Sie diesen Code in Outlook oder im Microsoft Visual-Basic-Editor eingeben. Achten Sie darauf, dass jede Zeile zweimal ausgeführt wird, damit Sie wieder zum aktivierten bzw. sichtbaren Ausgangsstatus zurückkehren.
Application.CommandBars("Tools").Enabled = _ Not Application.CommandBars("Tools").Enabled Application.CommandBars("Tools").Controls("Macro").Enabled = _ Not Application.CommandBars("Tools").Controls("Macro").Enabled Application.CommandBars("Tools").controls("Macro").Visible = _ Not Application.CommandBars("Tools").controls("Macro").Visible
Positionieren der Befehlsleisten
Mit der Position-Eigenschaft einer Befehlsleiste wird festgelegt, an welcher Stelle in der Anwendung eine Befehlsleiste angezeigt wird. Mit den enumerierten Konstanten msoBarLeft, msoBarTop, msoBarRight und msoBarBottom wird festgelegt, dass die Befehlsleisten jeweils am linken, oberen, rechten bzw. unteren Rand der Anwendung angezeigt werden. Mit der enumerierten Konstante msoBarFloating wird angegeben, dass die Befehlsleiste an keinem Rand der Anwendung verankert ist. Mit der enumerierten Konstante msoBarPopup wird festgelegt, dass die Befehlsleiste ein Popupmenü darstellt.
Mit der folgenden Funktion wird die Position einer bestimmten Befehlsleiste geändert.
Public Function ChangeCommandBarPosition(ByVal strCommandBarName As String, _ ByVal msoPosition As MsoBarPosition) As Boolean ' Zweck: Ändert die Position einer Befehlsleiste. ' Akzeptiert: ' strCommandBarName: Der Name der Befehlsleiste, deren Position geändert werden soll. ' Rückgabe: TRUE, wenn die Befehlsleiste erfolgreich verschoben wurde. On Error GoTo ChangeCommandBarPosition_Err ' Die nächste Codezeile ersetzen durch: ' Application.ActiveExplorer.CommandBars.Item(strCommandBarName).Position = _ msoPosition <- Für Outlook ' Application.VBE.CommandBars.Item(strCommandBarName).Position = _ msoPosition <- Für Visual Basic-Editor Application.CommandBars.Item(strCommandBarName).Position = msoPosition ChangeCommandBarPosition_End: ChangeCommandBarPosition = True Exit Function ChangeCommandBarPosition_Err: ChangeCommandBarPosition = False End Function
Sie können diese Funktion mit folgendem oder ähnlichem Code testen:
Public Sub TestChangeCommandBarPosition() ' Zweck: Testet die ChangeCommandBarPosition-Funktion. If ChangeCommandBarPosition("Standard", msoBarFloating) = True Then MsgBox "Die Befehlsleiste wurde erfolgreich verschoben." Else MsgBox "Die Befehlsleiste konnte nicht verschoben werden. Einige Befehlsleisten können nicht" & _ "auf bestimmte Weise verschoben werden." End If End Sub
Dynamisches Hinzufügen und Löschen von Befehlsleisten
Es sind zahlreiche Gelegenheiten vorstellbar, bei denen Sie Befehlsleisten bestimmten Office-Dokumenten zuordnen möchten. Möglicherweise möchten Sie z.B. bestimmte benutzerdefinierte Befehlsleisten nur anzeigen, wenn ein bestimmtes Office-Dokument geöffnet ist. Wenn das Dokument jedoch geschlossen ist, sollen die Befehlsleisten ausgeblendet werden.
Ein gutes Beispiel, wie dies beim Programmieren umgesetzt werden kann, ist die Verwendung von Excel. Um dies zu testen, erstellen Sie eine neue, leere Arbeitsmappe und benennen Tabelle1 in CommandBarInfo um. Geben Sie auf dem Arbeitsblatt CommandBarInfo folgende Informationen ein:
Abbildung 4. Informationen für die dynamische Erstellung einer Befehlsleiste in Excel
Fügen Sie im Visual Basic-Editor folgenden Code einem neuen Codemodul hinzu, das mit der neuen, leeren Arbeitsmappe verknüpft ist:
Public Function CreateCommandBarPopup() As Boolean ' Zweck: Erstellt anhand von Informationen auf einem Excel-Arbeitsblatt ' ein Popupsteuerelement mit Menüeinträgen für die Befehlsleiste. ' Rückgabe: TRUE, wenn das Popupsteuerelement für die ' Befehlsleiste erfolgreich hinzugefügt wurde. Dim objWorksheet As Excel.Worksheet Dim objCommandBarControl As Office.CommandBarControl Dim objCommandBarPopup As Office.CommandBarPopup Dim objCommandBarButton As Office.CommandBarButton Dim intRow As Integer On Error GoTo CreateCommandBarPopup_Err ' Das Arbeitsblatt mit den Befehleisteninformationen muss ' "CommandBarInfo" genannt werden. Set objWorksheet = ThisWorkbook.Sheets("CommandBarInfo") ' Alle vorhandenen Instanzen dieses Steuerelements ' aus vorherigen Versionen löschen. For Each objCommandBarControl In Application.CommandBars.Item("Standard").Controls If objCommandBarControl.Caption = objWorksheet.Cells(1, 1) Then objCommandBarControl.Delete End If Next objCommandBarControl Set objCommandBarPopup = _ Application.CommandBars.Item("Standard").Controls.Add(msoControlPopup) objCommandBarPopup.Caption = objWorksheet.Cells(1, 1) intRow = 3 ' Schaltflächen hinzufügen, bis keine Beschriftungen mehr vorhanden sind. Do Until objWorksheet.Cells(intRow, 1) = "" With objCommandBarPopup Set objCommandBarButton = .Controls.Add(msoControlButton) With objCommandBarButton .Caption = objWorksheet.Cells(intRow, 1) .OnAction = objWorksheet.Cells(intRow, 2) End With End With intRow = intRow + 1 Loop CreateCommandBarPopup_End: CreateCommandBarPopup = True Exit Function CreateCommandBarPopup_Err: CreateCommandBarPopup = False End Function Public Function DeleteCommandBarPopup() As Boolean ' Zweck: Löscht anhand der Informationen auf einem Excel-Arbeitsblatt ' ein Popupsteuerelement der Befehlsleisten. ' Rückgabe: TRUE, wenn das Popupsteuerelement für die ' Befehlsleiste erfolgreich gelöscht wurde. Dim objWorksheet As Excel.Worksheet Dim objCommandBarControl As Office.CommandBarControl On Error GoTo DeleteCommandBarPopup_Err ' Das Arbeitsblatt mit den Befehlsleisteninformationen muss ' "CommandBarInfo" genannt werden. Set objWorksheet = ThisWorkbook.Sheets("CommandBarInfo") ' Alle bestehenden Instanzen dieses Steuerelements löschen. For Each objCommandBarControl In Application.CommandBars.Item("Standard").Controls If objCommandBarControl.Caption = objWorksheet.Cells(1, 1) Then objCommandBarControl.Delete End If Next objCommandBarControl DeleteCommandBarPopup_End: DeleteCommandBarPopup = True Exit Function DeleteCommandBarPopup_Err: DeleteCommandBarPopup = False End Function Public Sub TestMacro() ' Zweck: Bietet ein Testmakro zur Vollständigkeit. MsgBox "Dies ist ein Testmakro". End Sub
Fügen Sie dem Modul ThisWorkbook der neuen, leeren Arbeitsmappe folgenden Code hinzu:
Private Sub Workbook_Open() If CreateCommandBarPopup = False Then MsgBox "Das Popupmenü konnte nicht ordnungsgemäß hinzugefügt werden". Else MsgBox "Das Popupmenü wurde erfolgreich hinzugefügt". End If End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) If DeleteCommandBarPopup = False Then MsgBox "Das Popupmenü konnte nicht ordnungsgemäß gelöscht werden". Else MsgBox "Das Popupmenü wurde erfolgreich gelöscht". End If End Sub
Speichern und schließen Sie die Arbeitsmappe, und öffnen Sie sie anschließend erneut. Beachten Sie, dass in der Standard-Symbolleiste das Popupmenü Hausarbeit hinzugefügt wurde. Wenn Sie die Arbeitsmappe schließen, wird das Popupmenü Hausarbeit hingegen ausgeblendet.
Eine ausführlichere Version dieser Technik finden Sie in der von John Walkenbach, einem so genannten Excel-MVP (Most Valuable Professional), vorgestellten Lösung unter http://j-walk.com/ss/excel/tips/tip53.htm (in Englisch).
Die Subroutinen "CommandBarDocumenter" und "CommandBarControlDocumenter"
Bei der Entwicklung von Lösungen mit Befehlsleisten muss ich häufig einen bestimmten Index oder Namen bzw. eine bestimmte Beschriftung für Befehlsleisten oder Steuerelemente von Befehlsleisten abrufen. Ich habe die Subroutinen CommandBarDocumenter und CommandBarControlDocumenter erstellt, um die allgemeinen Eigenschaften aller Befehlsleisten und Steuerelemente der Befehlsleisten in einer Office-Anwendung zu dokumentieren.
Um diese Beispiele auszuführen, kopieren Sie den folgenden Code im Visual Basic-Editor in ein Codemodul einer Microsoft Office-XP-Anwendung, und führen anschließend eine der beiden oder beide der folgenden Subroutinen aus. Wenn Sie dazu aufgefordert werden, speichern Sie die Ergebnisse als Textdateien (.txt). Dadurch können Sie die Ergebnisse für die Anzeige und Filterfunktionen problemlos in eine Anwendung, beispielsweise Microsoft Excel, laden.
Public Sub CommandBarDocumenter() ' Zweck: Schreibt Informationen über alle Befehlsleisten ' in der aktuellen Anwendung in eine Textdatei. ' Sie müssen zuerst einen Verweis auf die Microsoft Scripting Runtime ' (scrrun.dll) festlegen, damit dieser Code richtig ausgeführt wird. ' Anmerkung: Dieser Code funktioniert nur mit Microsoft Office XP. Dim objCommandBar As Office.CommandBar Dim strType As String Dim strPosition As String Dim objFileSaveDialog As Office.FileDialog Dim objFSO As Scripting.FileSystemObject Dim objTextStream As Scripting.TextStream Const SAVE_BUTTON As Integer = -1 Set objFileSaveDialog = Application.FileDialog(msoFileDialogSaveAs) objFileSaveDialog.Title = "Ergebnisse speichern unter" ' Der Benutzer hat auf die Schaltfläche "Speichern" geklickt. If objFileSaveDialog.Show = SAVE_BUTTON Then Set objFSO = New Scripting.FileSystemObject Set objTextStream = objFSO.CreateTextFile(objFileSaveDialog.SelectedItems.Item(1)) objTextStream.WriteLine "Name" & vbTab & _ "Type" & vbTab & _ "Enabled" & vbTab & _ "Visible" & vbTab & _ "Index" & vbTab & _ "Position" & vbTab & _ "Protection" & vbTab & _ "Row Index" & vbTab & _ "Top" & vbTab & _ "Height" & vbTab & _ "Left" & vbTab & _ "Width" ' Die nächste Zeile ersetzen durch: ' For Each objCommandBar In Application.ActiveExplorer.CommandBars _ <- Für Outlook ' For Each objCommandBar In Application.VBE.CommandBars <- Für _ Visual Basic-Editor For Each objCommandBar In Application.CommandBars Select Case objCommandBar.Type Case msoBarTypeMenuBar strType = "Menu Bar" Case msoBarTypeNormal strType = "Normal" Case msoBarTypePopup strType = "Pop-Up" End Select Select Case objCommandBar.Position Case msoBarBottom strPosition = "Bottom" Case msoBarFloating strPosition = "Floating" Case msoBarLeft strPosition = "Left" Case msoBarMenuBar strPosition = "Menu Bar" Case msoBarPopup strPosition = "Pop-Up" Case msoBarRight strPosition = "Right" Case msoBarTop strPosition = "Top" End Select Select Case objCommandBar.Protection Case msoBarNoChangeDock strProtection = "No Change Dock" Case msoBarNoChangeVisible strProtection = "No Change Visible" Case msoBarNoCustomize strProtection = "No Customize" Case msoBarNoHorizontalDock strProtection = "No Horizontal Dock" Case msoBarNoMove strProtection = "No Move" Case msoBarNoProtection strProtection = "No Protection" Case msoBarNoResize strProtection = "No Resize" Case msoBarNoVerticalDock strProtection = "No Vertical Dock" End Select objTextStream.WriteLine objCommandBar.Name & vbTab & _ strType & vbTab & _ objCommandBar.Enabled & vbTab & _ objCommandBar.Visible & vbTab & _ objCommandBar.Index & vbTab & _ strPosition & vbTab & _ strProtection & vbTab & _ objCommandBar.RowIndex & vbTab & _ objCommandBar.Top & vbTab & _ objCommandBar.Height & vbTab & _ objCommandBar.Left & vbTab & _ objCommandBar.Width Next objCommandBar objTextStream.Close MsgBox "Ergebnisse geschrieben in " & objFileSaveDialog.SelectedItems.Item(1) & "." End If End Sub Sub CommandBarControlDocumenter() ' Zweck: Schreibt Informationen über alle Steuerelemente von ' Befehlsleisten in der aktuellen Anwendung in eine Textdatei. ' Sie müssen zuerst einen Verweis auf die Microsoft Scripting Runtime ' (scrrun.dll) festlegen, damit dieser Code richtig ausgeführt wird. ' Anmerkung: Dieser Code funktioniert nur mit Microsoft Office XP. Dim objCommandBar As Office.CommandBar Dim objCommandBarControl As Office.CommandBarControl Dim strOLEUsage As String Dim strType As String Dim objFileSaveDialog As Office.FileDialog Dim objFSO As Scripting.FileSystemObject Dim objTextStream As Scripting.TextStream Const SAVE_BUTTON As Integer = -1 Set objFileSaveDialog = Application.FileDialog(msoFileDialogSaveAs) objFileSaveDialog.Title = "Ergebnisse speichern unter" ' Der Benutzer hat auf die Schaltfläche "Speichern" geklickt. If objFileSaveDialog.Show = SAVE_BUTTON Then Set objFSO = New Scripting.FileSystemObject Set objTextStream = objFSO.CreateTextFile(objFileSaveDialog.SelectedItems.Item(1)) objTextStream.WriteLine "ID" & vbTab & _ "Index" & vbTab & _ "Caption" & vbTab & _ "Parent" & vbTab & _ "DescriptionText" & vbTab & _ "BuiltIn" & vbTab & _ "Enabled" & vbTab & _ "IsPriorityDropped" & vbTab & _ "OLEUsage" & vbTab & _ "Priority" & vbTab & _ "Tag" & vbTab & _ "TooltipText" & vbTab & _ "Type" & vbTab & _ "Visible" & vbTab & _ "Height" & vbTab & _ "Width" ' Die nächste Zeile ersetzen durch: ' For Each objCommandBar In Application.ActiveExplorer.CommandBars <- Für Outlook ' For Each objCommandBar In Application.VBE.CommandBars _ <- Für Visual Basic-Editor For Each objCommandBar In Application.CommandBars For Each objCommandBarControl In objCommandBar.Controls Select Case objCommandBarControl.OLEUsage Case msoControlOLEUsageBoth strOLEUsage = "Both" Case msoControlOLEUsageClient strOLEUsage = "Client" Case msoControlOLEUsageNeither strOLEUsage = "Neither" Case msoControlOLEUsageServer strOLEUsage = "Server" End Select Select Case objCommandBarControl.Type Case msoControlActiveX strType = "ActiveX" Case msoControlAutoCompleteCombo strType = "Auto-Complete Combo Box" Case msoControlButton strType = "Button" Case msoControlButtonDropdown strType = "Drop-Down Button" Case msoControlButtonPopup strType = "Popup Button" Case msoControlComboBox strType = "Combo Box" Case msoControlCustom strType = "Custom" Case msoControlDropdown strType = "Drop-Down" Case msoControlEdit strType = "Edit" Case msoControlExpandingGrid strType = "Expanding Grid" Case msoControlGauge strType = "Gauge" Case msoControlGenericDropdown strType = "Generic Drop-Down" Case msoControlGraphicCombo strType = "Graphic Combo Box" Case msoControlGraphicDropdown strType = "Graphic Drop-Down" Case msoControlGraphicPopup strType = "Popup Graphic" Case msoControlGrid strType = "Grid" Case msoControlLabel strType = "Label" Case msoControlLabelEx strType = "LabelEx" Case msoControlOCXDropdown strType = "OCX Drop-Down" Case msoControlPane strType = "Pane" Case msoControlPopup strType = "Popup" Case msoControlSpinner strType = "Spinner" Case msoControlSplitButtonMRUPopup strType = "Split Button MRU Popup" Case msoControlSplitButtonPopup strType = "Button Popup" Case msoControlSplitDropdown strType = "Split Drop-Down" Case msoControlSplitExpandingGrid strType = "Split Expanding Grid" Case msoControlWorkPane strType = "Work Pane" End Select objTextStream.WriteLine objCommandBarControl.ID & _ vbTab & _ objCommandBarControl.Index & vbTab & _ objCommandBarControl.Caption & vbTab & _ objCommandBarControl.Parent.Name & vbTab & _ objCommandBarControl.DescriptionText & vbTab & _ objCommandBarControl.BuiltIn & vbTab & _ objCommandBarControl.Enabled & vbTab & _ objCommandBarControl.IsPriorityDropped & vbTab & _ strOLEUsage & vbTab & _ objCommandBarControl.Priority & vbTab & _ objCommandBarControl.Tag & vbTab & _ objCommandBarControl.TooltipText & vbTab & _ strType & vbTab & _ objCommandBarControl.Visible & vbTab & _ objCommandBarControl.Height & vbTab & _ objCommandBarControl.Width Next objCommandBarControl Next objCommandBar objTextStream.Close MsgBox "Ergebnisse geschrieben in " & _ objFileSaveDialog.SelectedItems.Item(1) & "." End If End Sub