Getting Information About Command Bars and Controls
This content is no longer actively maintained. It is provided as is, for anyone who may still be using these technologies, with no warranties or claims of accuracy with regard to the most recent product version or service release.
Each Microsoft® Office application contains dozens of built-in command bars and can contain as many custom command bars as you choose to add. Each command bar can be one of three types: menu bar, toolbar, or pop-up menu. All of these command bar types can contain additional command bars and any number of controls. To get a good understanding of the command bars object model, it is often best to start by examining the various command bars and controls in an existing application.
You can use the following procedure to print (to the Debug window) information about any command bar and its controls:
Function CBPrintCBarInfo(strCBarName As String) As Variant
' This procedure prints (to the Debug window) information
' about the command bar specified in the strCBarName argument
' and information about each control on that command bar.
Dim cbrBar As CommandBar
Dim ctlCBarControl As CommandBarControl
Const ERR_INVALID_CMDBARNAME As Long = 5
On Error GoTo CBPrintCBarInfo_Err
Set cbrBar = Application.CommandBars(strCBarName)
Debug.Print "CommandBar: " & cbrBar.Name & vbTab & "(" _
& CBGetCBType(cbrBar) & ")" & vbTab & "(" _
& IIf(cbrBar.BuiltIn, "Built-in", "Custom") & ")"
For Each ctlCBarControl In cbrBar.Controls
Debug.Print vbTab & ctlCBarControl.Caption & vbTab & "(" _
& CBGetCBCtlType(ctlCBarControl) & ")"
Next ctlCBarControl
CBPrintCBarInfo_End:
Exit Function
CBPrintCBarInfo_Err:
Select Case Err.Number
Case ERR_INVALID_CMDBARNAME
CBPrintCBarInfo = "'" & strCBarName & _
"' is not a valid command bar name!"
Case Else
CBPrintCBarInfo = "Error: " & Err.Number _
& " - " & Err.Description
End Select
Resume CBPrintCBarInfo_End
End Function
You call this procedure in the Visual Basic Editor's Immediate window by using the name of a command bar as the only argument. For example, if you execute the following command from the Immediate window:
? CBPrintCBarInfo("Web")
You will see a listing of all the controls and their control types on the Office Web built-in toolbar, as shown in the following figure.
Listing of Web Toolbar Controls
When a control type is shown as "Popup," as with the Favorites control above, the control itself is a command bar. You can get a listing of the controls on a pop-up menu command bar by calling the CBPrintCBarInfo procedure and passing in the name of the pop-up menu as the strCBarName argument. For example:
? CBPrintCBarInfo("Favorites")
Note that the CBPrintCBarInfo procedure calls two other custom procedures to get the command bar type and the control type. To get information about every command bar of any type in an application, you can use the PrintAllCBarInfo procedure.
Note To refer to a member of the CommandBars collection, use the name of the CommandBar object or an index value that represents the object's location in the collection. The controls on a command bar are members of the CommandBar object's Controls collection. To refer to a control in the Controls collection, use the control's Caption property or an index value that represents the control's location within the collection. All collections are indexed beginning with 1.
See Also
Working with Command Bars | Manipulating Command Bars and Command Bar Controls with VBA Code | Creating a Command Bar | Hiding and Showing a Command Bar | Copying a Command Bar | Deleting a Command Bar | Preventing Users from Modifying Custom Command Bars | Working with Personalized Menus | Working with Images on Command Bar Buttons | Working with Command Bar Controls | Working with Command Bar Events