Set References to Use Command Bars
In Microsoft Access 2000, toolbars, shortcut menus, and menu bars are combined into a single CommandBars collection that you can control programmatically by using Visual Basic for Applications. You can modify any Microsoft Access built-in menu bars or toolbars, and you can create and modify custom toolbars, menu bars, and shortcut menus.In order to program with command bars, you must set a reference to the Microsoft Office 9.0 Object Library. To do so follow these steps:
- While in the Visual Basic Editor, on the Tools menu, click References.
- In the References dialog box, click to select Microsoft Office 9.0 Object Library.
- Click OK.
Example 1: Creating a Toolbar
- Open the sample database Northwind.mdb.
- Create a module and type the following procedures:
'**************************************************************** ' This procedure creates a new toolbar. '**************************************************************** Sub AddNewCB() Dim CBar As CommandBar, CBarCtl As CommandBarControl On Error GoTo AddNewCB_Err ' Create a new floating toolbar and make it visible. Set CBar = CommandBars.Add(Name:="Sample Toolbar", Position:= _ msoBarFloating) CBar.Visible = True ' Create a button with text on the bar and set some properties. Set CBarCtl = CBar.Controls.Add(Type:=msoControlButton) With CBarCtl .Caption = "Button" .Style = msoButtonCaption .TooltipText = "Display Message Box" .OnAction = "=MsgBox(""You pressed a toolbar button!"")" End With ' Create a button with an image on the bar and set some ' properties. Set CBarCtl = CBar.Controls.Add(Type:=msoControlButton) With CBarCtl .FaceId = 1000 .Caption = "Toggle Button" .TooltipText = "Toggle First Button" .OnAction = "=ToggleButton()" End With ' Create a combo box control on the bar and set some properties. Set CBarCtl = CBar.Controls.Add(msoControlComboBox) With CBarCtl .Caption = "Drop Down" .Width = 100 .AddItem "Create Button", 1 .AddItem "Remove Button", 2 .DropDownWidth = 100 .OnAction = "=AddRemoveButton()" End With Exit Sub AddNewCB_Err: MsgBox "Error " & Err.Number & vbCr & Err.Description Exit Sub End Sub '**************************************************************** ' This procedure is called from a button on the toolbar. ' It toggles the Visible property of another button on the bar. '**************************************************************** Function ToggleButton() Dim CBButton As CommandBarControl On Error GoTo ToggleButton_Err Set CBButton = CommandBars("Sample Toolbar").Controls(1) CBButton.Visible = Not CBButton.Visible Exit Function ToggleButton_Err: MsgBox "Error " & Err.Number & vbCr & Err.Description Exit Function End Function '**************************************************************** 'This procedure is called from a combo box on the toolbar 'It adds a button to the bar or removes it '**************************************************************** Function AddRemoveButton() Dim CBar As CommandBar, CBCombo As CommandBarComboBox Dim CBNewButton As CommandBarButton On Error GoTo AddRemoveButton_Err Set CBar = CommandBars("Sample Toolbar") Set CBCombo = CBar.Controls(3) Select Case CBCombo.ListIndex 'If Create Button is selected, create a button on the bar Case 1 Set CBNewButton = CBar.Controls.Add(Type:=msoControlButton) With CBNewButton .Caption = "New Button" .Style = msoButtonCaption .BeginGroup = True .Tag = "New Button" .OnAction = "=MsgBox(""This is a new button!"")" End With ' Find and remove the new button if it exists. Case 2 Set CBNewButton = CBar.FindControl(Tag:="New Button") CBNewButton.Delete End Select Exit Function AddRemoveButton_Err: ' If the button does not exist. If Err.Number = 91 Then MsgBox "Cannot remove button that does not exist!" Exit Function Else MsgBox "Error " & Err.Number & vbCr & Err.Description Exit Function End If End Function
- To test this function, type the following line in the Immediate window, and then press ENTER:
AddNewCB
- Switch back to the Access window and you will see a floating toolbar on the screen.
- Click the word "Button" on the toolbar and note the message box that appears.
- Click the button with the light bulb image and note that "Button" disappears. Click it again and "Button" reappears.
- Select Create Button in the combo box and note that a button called New Button is added to the toolbar.
- Select Remove Button in the combo box and note that New Button is removed from the toolbar.
Example 2: Creating a Menu Bar
- Open the sample database Northwind.mdb.
- Create a module and type the following procedures:
'**************************************************************** ' This procedure creates a new menu bar. '**************************************************************** Sub AddNewMB() Dim MBar As CommandBar, MBarCtl As CommandBarControl Dim MBarPopup As CommandBarPopup, MBarSubCtl as CommandBarControl On Error GoTo AddNewMB_Err ' Create a new menu bar and dock it on the left. Set MBar = CommandBars.Add(Name:="Sample Menu Bar", Position:= _ msoBarLeft, MenuBar:=True, Temporary:=False) ' Make the menu bar visible. MBar.Visible = True ' Prevent users from undocking the menu bar. MBar.Protection = msoBarNoMove ' Create a popup control on the bar and set its caption. Set MBarCtl = MBar.Controls.Add(Type:=msoControlPopup) MBarCtl.Caption = "Displa&y" ' Create 2 controls on the Display popup and set some properties. Set MBarSubCtl = MBarCtl.Controls.Add(Type:=msoControlButton) With MBarSubCtl .Style = msoButtonIconAndCaption .Caption = "E&nable ClickMe" .FaceId = 59 .OnAction = "=ToggleClickMe()" .Parameter = 1 .BeginGroup = True End With Set MBarSubCtl = MBarCtl.Controls.Add(Type:=msoControlButton) With MBarSubCtl .Style = msoButtonIconAndCaption .Caption = "Di&sable ClickMe" .FaceId = 276 .OnAction = "=ToggleClickMe()" .Parameter = 2 .BeginGroup = True End With ' Add another control to the menu bar. Set MBarCtl = MBar.Controls.Add(Type:=msoControlButton) With MBarCtl .BeginGroup = True .Caption = "&ClickMe" .Style = msoButtonCaption .OnAction = "=MsgBox(""You clicked ClickMe"")" End With ' Add a control to make this menu bar invisible and bring back ' the system menu bar. Set MBarCtl = MBar.Controls.Add(Type:=msoControlButton) With MBarCtl .BeginGroup = True .Caption = "&Show Northwind Menu Bar" .Style = msoButtonCaption .OnAction = "=SampleMenuDisable()" End With Exit Sub AddNewMB_Err: MsgBox "Error " & Err.Number & vbCr & Err.Description Exit Sub End Sub '**************************************************************** ' This procedure uses the Parameter property of a command bar ' control to execute a different action depending on which item ' you click on a popup menu. '**************************************************************** Function ToggleClickMe() Dim MyMenu As CommandBar Dim MBarClickMe As CommandBarControl On Error GoTo ToggleClickMe_Err Set MyMenu = CommandBars("Sample Menu Bar") Set MBarClickMe = MyMenu.Controls(2) ' The ActionControl property of command bars returns the control ' whose OnAction property is running this procedure. With CommandBars.ActionControl Select Case .Parameter Case 1 MBarClickMe.Enabled = True Case 2 MBarClickMe.Enabled = False End Select End With Exit Function ToggleClickMe_Err: MsgBox "Error " & Err.Number & vbCr & Err.Description Exit Function End Function '**************************************************************** ' This function restores the original menu bar. Because there can ' only be one system menu bar, you must hide the sample menu bar ' when you want to bring back the previous system menu bar. '**************************************************************** Function SampleMenuDisable() Application.CommandBars("Sample Menu Bar").Visible = False Application.CommandBars("NorthwindCustomMenuBar").Visible = True End Function
- To test this function, type the following line in the Immediate window, and then press ENTER:
AddNewMB
- Switch back to the Access window and you will see a docked menu bar on the left side of the screen.
- Click the ClickMe button on the menu and note the message box that appears.
- Click the Display button, and then click Disable ClickMe. Note that the ClickMe button is dimmed.
- Click the Display button, and then click Enable ClickMe. Note that the ClickMe button is enabled.
- Click the Show Northwind Menu Bar button to restore the original system menu bar.