Microsoft provides programming examples for illustration only, without warranty either expressed or implied. This includes, but is not limited to, the implied warranties of merchantability or fitness for a particular purpose. This article assumes that you are familiar with the programming language that is being demonstrated and with the tools that are used to create and to debug procedures. Microsoft support engineers can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific requirements.
Examples in this article
The examples in this article use VBA code in Excel 2000, in Excel
2002, and in Excel 2003 to customize menus. To use the example macros, follow
these steps:
- Start Excel.
- On the Tools menu, point to
Macro, and then click Visual Basic
Editor.
- On the Insert menu, click
Module.
- Type one of the macro examples from this article, or you
can use a copy-and-paste operation to copy the macro examples to a module
sheet.
- On the Run menu, click Run
Sub/User Form.
- If the Macro dialog box appears, click the
macro name, and then click Run.
Command bars
In Microsoft Office, toolbars, menu bars, and shortcut menus are
all controlled programmatically as one type of object: command bars. All the
following items are represented in VBA by
CommandBar objects:
- Menu bars, toolbars, and shortcut menus.
- Menus on menu bars and toolbars.
- Submenus on menus, submenus, and shortcut menus.
You can modify any built-in menu bar or any built-in toolbar,
and you can create and modify custom toolbars, menu bars, and shortcut menus to
deliver with your VBA code. You present the features of your program as
individual buttons on toolbars or as groups of command names on menus. Because
toolbars and menus are both command bars, you use the same kind of
controls.
In VBA and in Microsoft Visual Basic, buttons and menu items
are represented by
CommandBarButton objects. The pop-up controls that display menus and submenus are
represented by
CommandBarPopup objects. In the following examples, the control that is named
"Menu" and the control that is named "Submenu" are both pop-up controls that
display a menu and a submenu. Both the menu and the submenu are unique
CommandBar objects with their own set of controls.
In Microsoft
Excel, menu bars and toolbars are referred to as the same programmable object
type, the
CommandBar object. You use the controls in the
CommandBar object to refer to menus, menu items, submenus, and shortcut
menus. You use a constant with each control in the
Type argument to specify the type of control that you
want to use for the menu, the submenu, or the command.
Control constants
The following is a list of the various control constants in Excel
2003 that specify the type of graphical control to use for a particular menu
bar control:
- MsoControlActiveX*
- MsoControlAutoCompleteCombo***
- MsoControlButton
- MsoControlButtonDropdown
- MsoControlButtonPopup
- MsoControlComboBox
- MsoControlCustom
- MsoControlDropdown
- MsoControlEdit
- MsoControlExpandingGrid
- MsoControlGauge
- MsoControlGenericDropdown
- MsoControlGraphicCombo
- MsoControlGraphicDropdown
- MsoControlGraphicPopup
- MsoControlGrid
- MsoControlLabel
- MsoControlLabelEx***
- MsoControlOCXDropDown
- MsoControlPane **
- MsoControlPopup
- MsoControlSpinner***
- MsoControlSplitButtonMRUPopup
- MsoControlSplitButtonPopup
- MsoControlSplitDropdown
- MsoControlSplitExpandingGrid
- MsoControlWorkPane**
*=New in Microsoft Excel 2000
**= New in Microsoft Excel
2002
***=New in Microsoft Office Excel 2003
Menu bars
A menu bar is a kind of command bar. A menu bar is the kind of
object where you add menus, menu items, and submenus.
For more
information about how to manage menu bars and menu items in Excel, follow these
steps:
- Start the Microsoft Visual Basic Editor.
- On the Help menu, click Microsoft
Visual Basic Help.
- In the Office Assistant box or in the
Answer Wizard box, type Menu bars, and
then click Search.
- In Excel 2003 and in Excel 2002, click Adding and
Managing Menu Bars and Menu Items. In Excel 2000, click About
menus and toolbars.
You can make modifications to both the menu bar and to the
controls on that menu bar at run time. The changes that you make to the menu
bar may affect the appearance or the position of the menu bar. Changes that you
make to the controls depend on the control type. The following table lists the
most common properties and the common methods for changing the state, the
action, or the contents of a control:
Collapse this tableExpand this table
Property or method | Purpose |
Add | Adds a menu bar by using the Add method of the CommandBars object collection and by specifying the value of TRUE for the Menubar argument. |
Enabled | If the Enabled property is set to the TRUE value, the user can make the
specified menu bar visible by using Visual Basic code. If the Enabled property is set to the FALSE value, the user cannot make the menu
bar visible. However, the menu bar will appear in the list of available command
bars. |
Protection | Makes it possible for you to protect the menu bar from
specific user actions. |
Position | Specifies the position of the new menu bar relative to
the program window. The position of the menu bar relative to the program window
can be one of the following MsoBarPosition constant properties: msoBarLeft, msoBarTop, msoBarRight, msoBarBottom, msoBarFloating, msoBarPopup (used to create shortcut menus), or msoBarMenuBar (for use with Apple Macintosh only). |
Visible | Specifies whether the control is visible or is
hidden. |
Return an ID for a command bar control
The following example code returns the ID for the active menu
bar:
Sub Id_Control ()
Dim myId as Object
set myId = CommandBars("Worksheet Menu Bar").Controls("Tools")
MsgBox myId.Caption & Chr(13) & MyId.Id
End Sub
Determine the name of the active menu bar
The following example code returns the name for the active menu
bar:
Sub MenuBars_GetName()
MsgBox CommandBars.ActiveMenuBar.Name
End Sub
Save the active state (for built-in or for customized menu bars)
You may want to declare the
OriginalMenuBar variable a public variable so that a subroutine can use it in
another subroutine, such as an Auto_Close subroutine. Declaring and using the
variable this way resets the user's previous menu bar to its original state.
The following sample macro resets the menu bar:
Public OriginalMenuBar as Object
Sub MenuBars_Capture()
Set OriginalMenuBar = CommandBars.ActiveMenuBar
End Sub
Create a custom command bar
The following example code creates a custom command bar that is
named
My Command Bar:
Sub MenuBar_Create() Application.CommandBars.Add Name:="My command bar" End Sub
You can also create a custom command bar by using the
Temporary:=True argument. The
Temporary:=True argument permits the command bars to automatically
be reset when you quit Excel. The following code uses the
Temporary:=True argument to create a custom command bar:
Sub MenuBar_Create()
Application.CommandBars.Add Name:="My command bar", Temporary:=True
End Sub
Display a custom command bar
The following example creates and displays a custom
My
Custom Bar menu bar, and then replaces the built-in menu bar:
Sub MenuBar_Show()
Dim myNewBar As Object
Set myNewBar = CommandBars.Add(Name:="Custom1", Position:=msoBarFloating)
' You must first enable your custom menu bar before you make it visible.
' Enabling a menu bar adds it to the list of available menu bars on
' the Customize dialog box.
' Setting the menubar property to True replaces the built-in menu bar.
myNewBar.Enabled = True
myNewBar.Visible = True
End Sub
Delete a custom command bar
The following example code deletes the custom menu bar that is
named
Custom 1:
Sub MenuBar_Delete()
CommandBars("Custom1").Delete
End Sub
Hide a command bar
The following example code removes the built-in
Chart menu bar from the list of available menu bars:
Sub MenuBar_Display()
CommandBars("Chart").Enabled = False
End Sub
Display a command bar
The following example code adds the built-in
Chart menu bar from the list of available menu bars:
Sub MenuBar_Display()
CommandBars("Chart").Enabled = True
End Sub
Restore a built-in command bar
Restoring a menu bar resets the default controls (for both menus
and menu items). The following example code restores the built-in
Chart menu bar:
Sub MenuBar_Restore()
CommandBars("Chart").Reset
End Sub
Note You can only reset built-in menu bars. You cannot reset a custom
menu bar.
Menus
Restoring a menu bar resets the default controls (for both menus
and menu items). The following example code restores the built-in
Chart menu bar:
Sub MenuBar_Restore()
CommandBars("Chart").Reset
End Sub
Note You can only reset built-in menu bars. You cannot reset a custom
menu bar.
Add a custom menu control to a command bar
The following example code adds the name of a menu that you add
programmatically to the
Worksheet menu bar. For example, this
code adds the menu name
New Menu to the to the
Worksheet menu bar.
Note You can give this menu any name that you want.
Sub Menu_Create()
Dim myMnu As Object
Set myMnu = CommandBars("Worksheet menu bar").Controls. _
Add(Type:=msoControlPopup, before:=3)
With myMnu
' The "&" denotes a shortcut key assignment (Alt+M in this case).
.Caption = "New &Menu"
End With
End Sub
Disable a menu control on a command bar
A menu control that is disabled appears dimmed and is not
available on a command bar. The following example disables the
New
Menu menu:
Sub Menu_Disable()
CommandBars("Worksheet menu bar").Controls("New &Menu").Enabled = False
End Sub
Enable a menu control on a command bar
The following example code enables the
New Menu menu that you disabled in the "Disable a menu control on a
command bar" section:
Sub Menu_Disable()
CommandBars("Worksheet menu bar").Controls("New &Menu").Enabled = True
End Sub
Delete a menu control on a command bar
The following code example deletes the
New Menu
menu that you created in the "Add a custom menu control to a command bar"
section from the
Worksheet menu bar:
Sub Menu_Delete()
CommandBars("Worksheet menu bar").Controls("New &Menu").Delete
End Sub
Restore a menu control on a command bar
The following example code restores the built-in
Chart menu bar on the
Worksheet menu bar:
Sub Menu_Restore()
Dim myMnu As Object
Set myMnu = CommandBars("Chart")
myMnu.Reset
End Sub
Commands
The range of modifications that you can make to a command depends
on the control type. Generally, buttons are either enabled or are hidden. Edit
boxes, drop-down list boxes, and combo boxes are more versatile in that you can
add or delete items from the list. Additionally, you can determine the action
that is performed by looking at the value of the items that you selected from
the list. You can change the action of any control to a built-in function or to
a custom function.
The following table lists the most common
properties of a control and the methods for changing the state, the action, or
the contents of a control:
Collapse this tableExpand this table
Property or method | Purpose |
Add | Adds a command to a command bar. |
AddItem | Adds an item to the drop-down list part of a drop-down
list box or of a combo box. |
Style | Specifies whether the button face displays an icon or a
caption. |
OnAction | Specifies the procedure to run when the user changes the
value of the control. |
Visible | Specifies whether the control is visible or is
hidden. |
For more information about menus in Excel 2003 and in
Excel 2002, follow these steps:
- Start the Visual Basic Script Editor.
- On the Help menu, click Microsoft
Visual Basic Help.
- In the Search Help box, type
menus, and then press ENTER.
- Click Adding and Managing Menu Bars and Menu Items
(Office).
Add a separator bar to a menu control
The following example code adds a separator bar before the
Worksheet command on the
Insert menu:
Sub menuItem_AddSeparator()
CommandBars("Worksheet menu bar").Controls("Insert") _
.Controls("Worksheet").BeginGroup = True
End Sub
Note To remove a separator bar, set the
BeginGroup property to
False.
Create a custom command control on a menu
The following example code creates a new command that is named
Custom1 on the
Tools menu of the
Worksheet menu bar, and then runs the
Code_Custom1 macro when you click
Custom1:
Sub menuItem_Create()
With CommandBars("Worksheet menu bar").Controls("Tools")
.Controls.Add(Type:=msoControlButton, Before:=1).Caption = "Custom1"
.Controls("Custom1").OnAction = "Code_Custom1"
End With
End Sub
Put a check mark next to a command control
The following example code puts a check mark next to the
Custom1 command if it is not selected, and then removes the check mark if
the
Custom1 command is selected:
Sub menuItem_checkMark()
Dim myPopup as Object
Set myPopup = CommandBars("Worksheet menu bar").Controls("Tools")
If myPopup.Controls("Custom1").State = msoButtonDown Then
' Remove check mark next to menu item.
myPopup.Controls("Custom1").State = msoButtonUp
MsgBox "Custom1 is now unchecked"
Else
' Add check mark next to menu item.
myPopup.Controls("Custom1").State = msoButtonDown
MsgBox "Custom1 is now checked"
End If
End Sub
Disable a command control on a command bar
The following example code disables the
Custom1 command that you created on the
Tools menu in
the "Create a custom command control on a menu" section:
Sub MenuItem_Disable()
Dim myCmd as Object
Set myCmd = CommandBars("Worksheet menu bar").Controls("Tools")
myCmd.Controls("Custom1").Enabled = False
End Sub
Enable a command control on a command bar
The following example code enables the
Custom1 command that you disabled in the "Disable a command control on a
command bar" section:
Sub MenuItem_Enable()
Dim myCmd as Object
Set myCmd = CommandBars("Worksheet menu bar").Controls("Tools")
myCmd.Controls("Custom1").Enabled = True
End Sub
Delete a command control on a menu
The following example code deletes the
Save
command on the
File menu:
Sub menuItem_Delete()
Dim myCmd As Object
Set myCmd = CommandBars("Worksheet menu bar").Controls("File")
myCmd.Controls("Save").Delete
End Sub
Restore a built-in command control on a menu
To restore a command control on a menu, you must know the
identification (ID) number for the control. To determine the ID number, see the
"Return an ID for a command bar control" section. The following example deletes
and then restores the
Save command that you deleted in the
"Delete a command control on a menu" section:
Sub menuItem_Restore()
Dim myCmd As Object
Set myCmd = CommandBars("Worksheet menu bar").Controls("File")
' Id 3 refers to the Save menu item control.
myCmd.Controls.Add Type:=msoControlButton, ID:=3, Before:=5
End Sub
Submenus
Submenus appear to the side of the parent menu when you click a
command. A command that is a submenu control has a small black arrow that is
located at the right end of the command name.
Add a submenu
The following example code adds a new submenu that is named
NewSub to the
Tools menu on the
Worksheet menu bar:
Sub SubMenu_Create()
Dim newSub as Object
Set newSub = CommandBars("Worksheet menu bar").Controls("Tools")
With newSub
.Controls.Add(Type:=msoControlPopup, Before:=1).Caption="NewSub"
End With
End Sub
Add a command to a submenu
The following example code adds a new command that is named
SubItem1 to the
NewSub submenu, and then it
runs the
Code_SubItem1 macro when you click
SubItem1:
Sub SubMenu_AddItem()
Dim newSubItem as Object
Set newSubItem = CommandBars("Worksheet menu bar") _
.Controls("Tools").Controls("NewSub")
With newSubItem
.Controls.Add(Type:=msoControlButton, Before:=1).Caption = "SubItem1"
.Controls("SubItem1").OnAction = "Code_SubItem1"
End With
End Sub
Disable a command control on a submenu
The following example code disables the same
SubItem command that you created in the "Add a command to a submenu"
section :
Sub SubMenu_DisableItem()
CommandBars("Worksheet menu bar").Controls("Tools") _
.Controls("NewSub").Controls("SubItem1").Enabled = False
End Sub
The following example enables the same SubItem command:
Sub SubMenu_DisableItem()
CommandBars("Worksheet menu bar").Controls("Tools") _
.Controls("NewSub").Controls("SubItem1").Enabled = True
End Sub
Delete a command on a submenu
The following example deletes the
SubItem1 command that you created on the
NewSub submenu
in the "Add a command to a submenu" section:
Sub SubMenu_DeleteItem()
CommandBars("Worksheet menu bar").Controls("Tools") _
.Controls("NewSub").Controls("SubItem1").Delete
End Sub
Disable a submenu control
The following example code disables the
NewSub
submenu that you created on the
Tools menu in the "Add a
submenu" section:
Sub SubMenu_DisableSub()
CommandBars("Worksheet menu bar").Controls("Tools") _
.Controls("NewSub").Enabled = False
End Sub
Note To enable the disabled control, set the
Enabled property to
True.
Delete a submenu control
The following example code deletes the
NewSub
submenu that you created on the
Tools menu in the "Add a
submenu" section:
Sub SubMenu_DeleteSub()
CommandBars("Worksheet menu bar").Controls("Tools") _
.Controls("NewSub").Delete
End Sub
Shortcut menu bars
A shortcut menu is a floating command bar that appears when the
user right-clicks an object. A shortcut menu bar can contain the same control
types as a command bar and the controls behave the same as the controls on a
command bar. You cannot create or modify shortcut menus from the program's
interface in most programs. Therefore, you must create and modify your shortcut
menus at run time.
For more information about shortcut menus in Excel
2002 and in Excel 2003, follow these steps:
- Start the Visual Basic Script Editor.
- On the Help menu, click Microsoft
Visual Basic Help.
- In the Search Help box, type
shortcut, and then press ENTER.
- Click Adding and Displaying Shortcut
Menus.
Create a new shortcut menu bar
The following example code creates a new shortcut menu bar that is
named
myShortcutBar:
Sub Shortcut_Create()
Dim myShtCtBar as Object
Set myShtCtBar = CommandBars.Add(Name:="myShortcutBar", _
Position:=msoBarPopup)
� This displays the shortcut menu bar.
� 200, 200 refers to the screen position in pixels as x and y coordinates.
myShtCtBar.ShowPopup 200,200
End Sub
Note The shortcut menu bar appears empty because no controls (menu
items or submenus) have been added to it.
Shortcut menus
Shortcut menu bars appear when you use the right mouse button to
click a specific Excel object. Excel has many shortcut menu bars for which a
variety of menus are available. You can also create custom shortcut menu bars
and customize the built-in menu bars.
Create a command on a shortcut menu bar
The following example code creates a new menu command that is
named
Item1 on the
myShortcutBar shortcut menu bar and it
runs the
Code_Item1 macro when you click
Item1:
Sub Shortcut_AddItem()
Dim myBar as Object
Set myBar = CommandBars("myShortcutBar")
With myBar
.Controls.Add (Type:=msoControlButton, before:=1).Caption = "Item1"
.Controls("Item1").OnAction = "Code_Item1"
End With
myBar.ShowPopup 200,200
End Sub
Disable a command control on a shortcut menu bar
The following example code disables the
Item1 command that you created in the "Create a command on a shortcut
menu" section:
Sub Shortcut_DisableItem()
Set myBar = CommandBars("myShortcutBar")
myBar.Controls("Item1").Enabled = False
myBar.ShowPopup 200,200
End Sub
Note To enable the disabled item, set the
Enabled property to
True.
Delete a command on a shortcut menu bar
The following example code deletes the menu command that is named
Item1 on the
myShortcutBar shortcut menu bar:
Sub Shortcut_DeleteItem()
Set myBar = CommandBars("myShortcutBar")
myBar.Controls("Item1").Delete
myBar.ShowPopup 200,200
End Sub
Delete a shortcut menu bar
Deleting the shortcut menu bar removes all the items. You cannot
restore a deleted custom menu bar. To restore it, you must re-create it and all
the menu items and the submenus.
The following example code deletes
the
myShortCutBar shortcut menu bar that you created in the
"Create a command on a shortcut menu bar" section:
Sub Shortcut_DeleteShortCutBar()
CommandBars("MyShortCutBar").Delete
End Sub
Restore a command on a
built-in shortcut menu bar
The following example code restores the default commands on the
worksheet
Cell shortcut menu bar:
Sub Shortcut_RestoreItem()
CommandBars("Cell").Reset
End Sub
Submenus on shortcut menus
You can create submenus on shortcut menu bars. Submenus appear to
the side of the parent menu when you click a command control. A command that is
a submenu control has a small, black arrow that is located to the right of its
name.
Create a new submenu on a shortcut menu bar
The following example adds a new submenu that is named
NewSub on the worksheet
Cell shortcut menu:
Sub ShortcutSub_Create()
CommandBars("Cell").Controls.Add(Type:=msoControlPopup, before:=1) _
.Caption = "NewSub"
' This displays the shortcut menu bar.
' 200, 200 refers to the screen position in pixels as x and y coordinates.
CommandBars("Cell").ShowPopup 200, 200
End Sub
Note The submenu is empty because no menu items have been added to
it.
Create a command control on a submenu that is located on a shortcut menu bar
The following macro adds the
SubItem1 command to the submenu
NewSub that you created
on the
Cell shortcut menu, and then runs the
Code_SubItem1 macro when you click
SubItem1:
Sub ShortcutSub_AddItem()
Dim newSubItem as Object
Set newSubItem = CommandBars("Cell").Controls("NewSub�)
With newSubItem
.Controls.Add(Type:=msoControlButton, before:=1).Caption = "subItem1"
' This will run the subItem1_Code macro when subItem1 is clicked.
.Controls("subItem1").OnAction = "Code_subItem1"
End With
' This displays the Cell shortcut menu bar.
' 200, 200 refers to the screen position in pixels as x and y coordinates
CommandBars("Cell").ShowPopup 200, 200
End Sub
Disable a submenu item control on a shortcut menu
The following example code disables the
SubItem1 command on the
NewSub submenu:
Sub ShortcutSub_DisableItem()
CommandBars("Cell").Controls("NewSub") _
.Controls("subItem1").Enabled = False
' This displays the Cell shortcut menu bar.
' 200, 200 refers to the screen position in pixels as x and y coordinates.
CommandBars("Cell").ShowPopup 200, 200
End Sub
Note To enable a disabled item, set the
Enabled property to
True.
Delete a submenu item control on a shortcut menu
The following example deletes the
SubItem1 command on the
NewSub submenu:
Sub ShortcutSub_DeleteItem()
CommandBars("Cell").Controls("NewSub").Controls("subItem1").Delete
' This displays the Cell shortcut menu bar.
' 200, 200 refers to the screen position in pixels as x and y coordinates.
CommandBars("Cell").ShowPopup 200, 200
End Sub
Disable a submenu control on a shortcut menu
The following example code disables the
NewSub
submenu on the
Cell shortcut menu bar:
Sub ShortcutSub_DisableSub()
CommandBars("Cell").Controls("NewSub").Enabled = False
' This displays the Cell shortcut menu bar.
' 200, 200 refers to the screen position in pixels as x and y coordinates.
CommandBars("Cell").ShowPopup 200, 200
End Sub
Note To enable a disabled item, set the
Enabled property to
True.
Delete a submenu control on a shortcut menu
The following example code deletes the
NewSub
submenu that you created on the
Cell shortcut menu bar:
Sub ShortcutSub_DeleteSub()
CommandBars("Cell").Controls("NewSub").Delete
' This displays the Cell shortcut menu bar.
' 200, 200 refers to the screen position in pixels as x and y coordinates.
CommandBars("Cell").ShowPopup 200, 200
End Sub
Find more information
The following resources are available to provide more information
about how to customize menus and menu bars in Excel.
Object Browser
The Object Browser contains a complete list of all the properties
and all the methods for a specific command. To find this information, switch to
the Visual Basic Editor (press ALT+F11), click
Object Browser
on the
View menu (or press F2), type the name of the control
in the
Search box, and then press ENTER or click
Search.
Microsoft Knowledge Base
The Microsoft Knowledge Base is a primary Microsoft product
information source for Microsoft Product Support Services support
professionals. The Microsoft Knowledge Base is also available to Microsoft
customers. This comprehensive database contains detailed articles with
technical information about Microsoft products, documented fix lists,
documentation errors, and answers to frequently asked technical support
questions.
To connect to the Microsoft Knowledge Base, visit the
following Microsoft Web site, and then follow the instructions that appear on
the page: