More Programming with Microsoft Office Command Bars
Paul Cornell
Microsoft Corporation
May 2, 2002
In last month's column, I introduced you to command bars, which are user interface components used throughout Microsoft® Office to allow users to carry out actions in Office applications. Based on your feedback regarding last month's column, I will share with you some additional information and code that deals with specific issues about command bars, specifically:
- How Microsoft Outlook® handles command bars programmatically.
- How to add custom images to command bar buttons.
- How to add combo boxes to command bars.
- How to disable and hide command bars and command bar controls.
- How to position command bars.
- How to dynamically add and delete command bars.
- How to list the common properties for command bars and command bar controls in a given Office application.
Command Bars and the Outlook Object Model
In last month's column, I neglected to mention that the Microsoft Outlook object model accesses command bars and command bar controls differ slightly from the other Microsoft Office applications.
In applications other than Outlook, you use code similar to the following to access command bars:
Public Sub ListCommandBarNames()
' Purpose: Lists all command bar names for the current application.
' Note: This code will not work in Outlook!
Dim objCommandBar As Office.CommandBar
For Each objCommandBar In Application.CommandBars
Debug.Print objCommandBar.Name
Next objCommandBar
End Sub
However, attempting to do this in Outlook will result in a run-time error. Instead, you must use the CommandBars property of either the Explorer or Inspector objects, as follows:
Public Sub ListOutlookExplorerCommandBarNames()
' Purpose: Lists all command bar names for the current explorer.
' Note: This code only works in Outlook!
Dim objCommandBar As Office.CommandBar
For Each objCommandBar In Application.ActiveExplorer.CommandBars
Debug.Print objCommandBar.Name
Next objCommandBar
End Sub
In the preceding code example, replace the code ActiveExplorer
with ActiveInspector
to print out all the of command bar names for the active inspector. For those of you who aren't familiar with the Outlook object model, an explorer represents the Outlook user interface. An inspector represents a window that contains a specific Outlook item, such as an e-mail message or a contact, and any tabbed pages within the Outlook item (for example, the Details tab of a task item).
Adding Custom Images to Command Bar Buttons
Although you can use the CommandBarButton object's FaceId property to set a command bar button's image to a built-in image supplied by Office, you can use the CommandBarButton object's Picture property to supply an image you create. You can also use the CommandBarButton object's Mask property to create a custom transparent image.
Although there are many available image editors on shareware and freeware sites on the Web, as well as tools such as Microsoft Visual C++®, Microsoft Paint is more than sufficient to create these images. To use Paint to create these images:
- On the Start menu, point to Programs, point to Accessories, and click Paint.
- On the Image menu, click Attributes.
- In the Width box, type 16. In the Height box, type 16. Make sure the Pixels and Colors options are selected, and then click OK.
- On the View menu, point to Zoom, and then click Custom.
- Click the 800% option, and then click OK.
- On the View menu, point to Zoom, and then click Show Grid.
- On the View menu, make sure the Tool Box and Color Box commands are checked.
- Create the image using the Tool Box and Color Box controls.
- When you've finished creating the image, on the File menu, click Save.
- Save the icon as a 256 Color Bitmap.
Here's an example of an image I created:
Figure 1. Custom opaque bitmap
To create a transparent image, you must create a corresponding image mask. To do this, save the image you just created, but with a different name. For each pixel you want to be transparent, color the pixel white. For each pixel you want to be opaque, color the pixel black. Then save the image again. Here's an example of the image mask I created:
Figure 2. Custom bitmap mask
Here's some sample code showing how to add the transparent picture to the command bar button:
Public Sub NewPictureOnNewCommandBar()
' Purpose: Adds a picture to a command bar button.
Dim objCommandBar As Office.CommandBar
Dim objCommandBarButton As Office.CommandBarButton
Dim objPicture As stdole.IPictureDisp
' Comment the next line of code if you don't want a transparent image.
Dim objMask As stdole.IPictureDisp
Const PICTURE_PATH As String = "C:\My Pictures\OK.bmp"
' Comment the next line of code if you don't want a transparent image.
Const PICTURE_MASK As String = "C:\My Pictures\OKMask.bmp"
Const COMMAND_BAR_NAME As String = "Test Command Bar"
' Replace the next line with:
' For Each objCommandBar In Application.ActiveExplorer.CommandBars <- For Outlook
' For Each objCommandBar In Application.VBE.CommandBars <- For 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)
' Comment the next line of code if you don't want a transparent image.
Set objMask = LoadPicture(PICTURE_MASK)
objCommandBarButton.Picture = objPicture
' Comment the next line of code if you don't want a transparent image.
objCommandBarButton.Mask = objMask
End Sub
As you can see in the preceding code, you create one object in code for the opaque image and one object in code for the image mask; each object must be of type stdole.IPictureDisp. Next, initialize each of these two objects by calling the objects' LoadPicture method. Finally, set the Picture property of the command bar button object to the opaque image object, and set the Mask property of the command bar button object to the image mask.
Here's what the finished results look like for opaque and transparent images:
Figure 3. Opaque and transparent images on a command bar button
By the way, don't confuse the CommandBarButton object's FaceId property with the CommandBarButton object's Id property. The Id property determines the built-in action for that command bar control. The default value of the Id property for all custom command bar controls is 1. Setting the Id property of a custom command bar control to a number other than 1 will set the action of the custom command bar control to a built-in action if one exists for that ID in the application. For reference, the following code lists all of the IDs for all of the command bar controls in the application:
Public Sub ListCommandBarControlIDs()
' Purpose: Lists all command bar control IDs for the
' current application.
Dim objCommandBar As Office.CommandBar
Dim objCommandBarControl As Office.CommandBarControl
' Replace the next line with:
' For Each objCommandBar In Application.ActiveExplorer.CommandBars <- For Outlook
' For Each objCommandBar In Application.VBE.CommandBars <- For 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
Adding Combo Boxes to Command Bars
To add a combo box to a command bar, use the CommandBarControls collection's Add method, passing the msoControlComboBox enumerated constant in for the Type argument. Then use the CommandBarComboBox object's AddItem method to add choices to the combo box.
The following function adds a combo box to an existing command bar:
Public Function AddComboBoxToCommandBar(ByVal strCommandBarName As String, _
ByVal strComboBoxCaption As String, _
ByRef strChoices() As String) As Boolean
' Purpose: Adds a combo box to a command bar.
' Accepts:
' strCommandBarName: The name of the command bar to add the combo box.
' strChoices(): An array of combo box choices.
' Returns: True if the combo box was successfully added to the command bar.
Dim objCommandBarControl As Office.CommandBarControl
Dim objCommandBarComboBox As Office.CommandBarComboBox
Dim varChoice As Variant
On Error GoTo AddComboBoxToCommandBar_Err
' Delete any previously-added instances of this combo box.
' Replace the next line of code with:
' For Each objCommandBarControl In _
' Application.ActiveExplorer.CommandBars.Item(strCommandBarName).Controls _
<- For Outlook
' For Each objCommandBarControl In _
' Application.VBE.CommandBars.Item(strCommandBarName).Controls _
<- For Visual Basic Editor
For Each objCommandBarControl In Application.CommandBars.Item(strCommandBarName).Controls
If objCommandBarControl.Caption = strComboBoxCaption Then
objCommandBarControl.Delete
End If
Next objCommandBarControl
' Create the combo box.
' Replace the next line of code with:
' Set objCommandBarComboBox = _
' Application.CommandBars.Item(strCommandBarName).Controls.Add(msoControlComboBox) _
<- For Outlook
' Set objCommandBarComboBox = _
' Application.CommandBars.Item(strCommandBarName).Controls.Add(msoControlComboBox) _
<- For 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
You can test this function with code similar to the following:
Public Sub TestAddComboBoxToCommandBar()
' Purpose: Tests the AddComboBoxToCommandBar function.
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 "Combo box successfully added."
Else
MsgBox "Could not add combo box."
End If
End Sub
Disabling and Hiding Command Bars and Command Bar Controls
As you develop Office solutions, you may want to prevent users from clicking on certain command bars and command bar controls associated with the solution. For example, you may want to prevent users from clicking any of the controls on the Forms toolbar to modify a custom form you created in Microsoft Word. Or you may want to disable the Macro command on the Tools menu for a given solution.
You set the Enabled property of a command bar or command bar control to False to disable a command bar or command bar control; likewise, you set the Enabled property of a command bar or command bar control to True to enable a command bar or command bar control.
You set the Visible property of a command bar or command bar control to False to hide a command bar or command bar control; likewise, you set the Visible property of a command bar or command bar control to True to show a command bar or command bar control.
To try this out, enter each of the following lines of code into the Immediate window. Each line of code will toggle the enabled or visible state of the command bar or command bar control specified. Remember to use the Application.ActiveExplorer
or Application.VBE
nomenclature if you enter this code in Outlook or the Microsoft Visual Basic® Editor. Be sure to run each line twice to get back to the enabled or visible state you started with.
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
Positioning Command Bars
The Position property of a command bar specifies where a command bar appears in the application. The msoBarLeft, msoBarTop, msoBarRight, and msoBarBottom enumerated constants specify that the command bar appears on the left, top, right, or bottom edges of the application. The msoBarFloating enumerated constant specifies that the command bar is not docked to an edge of the application. The msoBarPopup enumerated constant specifies that the command bar is a pop-up menu.
The following function changes the position of a given command bar.
Public Function ChangeCommandBarPosition(ByVal strCommandBarName As String, _
ByVal msoPosition As MsoBarPosition) As Boolean
' Purpose: Changes the position of a command bar.
' Accepts:
' strCommandBarName: The name of the command bar to change position.
' Returns: True if the command bar was successfully moved.
On Error GoTo ChangeCommandBarPosition_Err
' Replace the next line of code with:
' Application.ActiveExplorer.CommandBars.Item(strCommandBarName).Position = _
msoPosition <- For Outlook
' Application.VBE.CommandBars.Item(strCommandBarName).Position = _
msoPosition <- For the Visual Basic Editor
Application.CommandBars.Item(strCommandBarName).Position = msoPosition
ChangeCommandBarPosition_End:
ChangeCommandBarPosition = True
Exit Function
ChangeCommandBarPosition_Err:
ChangeCommandBarPosition = False
End Function
You can test this function with code similar to the following:
Public Sub TestChangeCommandBarPosition()
' Purpose: Tests the ChangeCommandBarPosition function.
If ChangeCommandBarPosition("Standard", msoBarFloating) = True Then
MsgBox "Command bar successfully moved."
Else
MsgBox "Could not move command bar. Some command bars cannot " & _
"be moved in certain ways."
End If
End Sub
Dynamically Adding and Deleting Command Bars
There may be occasions when you want to associate command bars with specific Office documents. For example, you want to display certain custom command bars only when a specific Office document is open, and hide them when the specific Office document is closed. A good example of how to do this programmatically is by using Excel. To test this out, create a new, blank workbook and rename Sheet1 to CommandBarInfo. Type the following information into the CommandBarInfo worksheet:
Figure 4. Information to dynamically create a command bar in Excel
In the Visual Basic Editor, add the following code to a new code module associated with your new, blank workbook:
Public Function CreateCommandBarPopup() As Boolean
' Purpose: Creates a command bar popup control with menu
' items, based on information provided in an Excel worksheet.
' Returns: True if the command bar popup control was
' successfully added.
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
' Worksheet with the command bar information on it must
' be named "CommandBarInfo".
Set objWorksheet = ThisWorkbook.Sheets("CommandBarInfo")
' Delete any existing instances of this control from
' previous versions.
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
' Keep adding buttons until we run out of captions.
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
' Purpose: Deletes a command bar popup control,
' based on information provided in an Excel worksheet.
' Returns: True if the command bar popup control was
' successfully deleted.
Dim objWorksheet As Excel.Worksheet
Dim objCommandBarControl As Office.CommandBarControl
On Error GoTo DeleteCommandBarPopup_Err
' Worksheet with the command bar information on it must
' be named "CommandBarInfo".
Set objWorksheet = ThisWorkbook.Sheets("CommandBarInfo")
' Delete any existing instances of this control.
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()
' Purpose: Provide a test macro for completeness.
MsgBox "This is a test macro."
End Sub
Add the following code to the ThisWorkbook module of your new, blank workbook:
Private Sub Workbook_Open()
If CreateCommandBarPopup = False Then
MsgBox "Could not correctly add the popup menu."
Else
MsgBox "Popup menu successfully added."
End If
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If DeleteCommandBarPopup = False Then
MsgBox "Could not correctly delete the popup menu."
Else
MsgBox "Popup menu successfully deleted."
End If
End Sub
Save and close the workbook, and then reopen the workbook. Notice that the Household Chores pop-up menu has been added to the Standard toolbar. Also notice that when you close the workbook, the Household Chores pop-up menu disappears.
For a more detailed version of this technique, see the solution presented by John Walkenbach, an Excel Most Valuable Professional (MVP), at http://j-walk.com/ss/excel/tips/tip53.htm.
The CommandBarDocumenter and CommandBarControlDocumenter Subroutines
As I develop command bar solutions, I frequently need to get a particular command bar or command bar control index, name, or caption. I created the CommandBarDocumenter
and CommandBarControlDocumenter
subroutines to document the common properties of all command bars and command bar controls in a given Office application.
To run these samples, copy the following code to a Microsoft Office XP application's code module in the Visual Basic Editor and then run either or both of the following subroutines. When prompted, save the results as text files (.txt). This makes the results easier to load into an application such as Microsoft Excel for viewing and filtering.
Public Sub CommandBarDocumenter()
' Purpose: Writes, to a text file, information about all
' command bars in the current application.
' You must first set a reference to the Microsoft Scripting Runtime
' (scrrun.dll) for this code to run correctly.
' Note: This code only works with 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 = "Save Results As"
' User clicked "Save" button.
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"
' Replace the next line with:
' For Each objCommandBar In Application.ActiveExplorer.CommandBars _
<- For Outlook
' For Each objCommandBar In Application.VBE.CommandBars <- For _
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 "Results written to " & objFileSaveDialog.SelectedItems.Item(1) & "."
End If
End Sub
Sub CommandBarControlDocumenter()
' Purpose: Writes, to a text file, information about all
' command bar controls in the current application.
' You must first set a reference to the Microsoft Scripting Runtime
' (scrrun.dll) for this code to run correctly.
' Note: This code only works with 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 = "Save Results As"
' User clicked "Save" button.
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"
' Replace the next line with:
' For Each objCommandBar In Application.ActiveExplorer.CommandBars <- For Outlook
' For Each objCommandBar In Application.VBE.CommandBars _
<- For 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 "Results written to " & _
objFileSaveDialog.SelectedItems.Item(1) & "."
End If
End Sub
Paul Cornell works for the MSDN Online Office Developer Center and the Office developer documentation team. Paul also writes the Office Power User Corner column for the Office Assistance Center. He spends his free time with his wife and two daughters.