Thread

VBA Excel Custom Menu Bar Code Explanation

Detailed breakdown of VBA code creating a custom menu bar in Excel. Includes variable declarations, menu creation, and action assignments.

Empty image or helper icon

VBA Excel Custom Menu Bar Code Explanation

Description

Detailed breakdown of VBA code creating a custom menu bar in Excel. Includes variable declarations, menu creation, and action assignments.

VBA Excel Custom Menu Bar Code Explanation

Tool: Code Explainer

Created: 07/22/2024

Prompt

Option Explicit

'===============================
Private Sub Delete_Menu_Bar()
    On Error Resume Next
        Application.CommandBars("Sub Menu Bar").Delete
    On Error GoTo 0
End Sub
Public Sub Add_Menu_Bar()
   Dim menuBar As CommandBar
   Dim Menu1 As CommandBarControl
   Dim Menu2 As CommandBarControl
   Dim Menu3 As CommandBarControl
   Dim menuItem As CommandBarControl
   Dim subItem As CommandBarControl
   
    On Error Resume Next
        Application.CommandBars("Sub Menu Bar").Delete
    On Error GoTo 0
    Set menuBar = CommandBars.Add(menuBar:=True, Position:=msoBarTop, Name:="Sub Menu Bar", temporary:=True)
        menuBar.Visible = True
    
    Set Menu1 = menuBar.Controls.Add(Type:=msoControlPopup)
    Menu1.Caption = "M&ain"
    Set menuItem = Menu1.Controls.Add(Type:=msoControlButton)
    With menuItem
       .Caption = "Ch&eck Update"
       .FaceId = "351"
       .OnAction = "Copy_File"
    End With
   Set menuItem = Menu1.Controls.Add(Type:=msoControlButton)
   With menuItem
      .Caption = "&About"
      .FaceId = "351"
      .OnAction = "Info"
   End With
    
    Set Menu2 = menuBar.Controls.Add(Type:=msoControlPopup)
    Menu2.Caption = "M&anufacture Order"
   Set menuItem = Menu2.Controls.Add(Type:=msoControlButton)
   With menuItem
      .Caption = "L&oad MO MS"
      .FaceId = "394"
      .OnAction = "Load_MS"
   End With
   Set menuItem = Menu2.Controls.Add(Type:=msoControlButton)
   With menuItem
      .Caption = "L&oad MO Orders"
      .FaceId = "394"
      .OnAction = ""
   End With
    Set menuItem = Menu2.Controls.Add(Type:=msoControlButton)
   With menuItem
      .Caption = "L&oad MO Bom"
      .FaceId = "394"
      .OnAction = ""
   End With
   
   Set Menu3 = menuBar.Controls.Add(Type:=msoControlPopup)
    Menu3.Caption = "&Third Menu"
   Set menuItem = Menu3.Controls.Add(Type:=msoControlButton)
   With menuItem
      .Caption = "F&irst Sub"
      .FaceId = "394"
      .OnAction = ""
   End With
   Set menuItem = Menu3.Controls.Add(Type:=msoControlButton)
   With menuItem
      .Caption = "S&econd Sub"
      .FaceId = "394"
      .OnAction = ""
   End With
    Set menuItem = Menu3.Controls.Add(Type:=msoControlPopup)
    menuItem.Caption = "Test"
   Set subItem = menuItem.Controls.Add(Type:=msoControlButton)
   With subItem
      .Caption = "F&irst Sub"
      .FaceId = "394"
      .OnAction = ""
   End With
    Set subItem = menuItem.Controls.Add(Type:=msoControlButton)
    With subItem
       .Caption = "S&econd Sub"
       .FaceId = "394"
       .OnAction = ""
    End With
    Set subItem = menuItem.Controls.Add(Type:=msoControlButton)
    With subItem
       .Caption = "Th&ird Sub"
       .FaceId = "394"
       .OnAction = ""
    End With
End Sub

Code Explanation: VBA Code for Custom Menu Bar in Excel

This code snippet is written in VBA (Visual Basic for Applications) and is used to create a custom menu bar in Microsoft Excel. Below is a detailed explanation of each part of the code.

Option Explicit

Option Explicit
  • Purpose: Ensures all variables are explicitly declared. This helps in avoiding errors due to typos in variable names and improves code readability and maintainability.

Private Sub Delete_Menu_Bar

Private Sub Delete_Menu_Bar()
    On Error Resume Next
        Application.CommandBars("Sub Menu Bar").Delete
    On Error GoTo 0
End Sub
  • Purpose: Deletes any existing menu bar named "Sub Menu Bar" to avoid duplication before creating a new one.
  • On Error Resume Next: Temporarily ignores errors, which is handy if the menu bar doesn't exist initially.
  • On Error GoTo 0: Resets the error handling to default.

Public Sub Add_Menu_Bar

Public Sub Add_Menu_Bar()
   Dim menuBar As CommandBar
   Dim Menu1 As CommandBarControl
   Dim Menu2 As CommandBarControl
   Dim Menu3 As CommandBarControl
   Dim menuItem As CommandBarControl
   Dim subItem As CommandBarControl
  • Purpose: Main procedure to create a custom menu bar with multiple menus and submenus.
  • Variable Declarations:
    • menuBar for the main menu bar.
    • Menu1, Menu2, Menu3 for top-level menus.
    • menuItem, subItem for items in the menus and submenus.

Initialization and Deletion

    On Error Resume Next
        Application.CommandBars("Sub Menu Bar").Delete
    On Error GoTo 0
    Set menuBar = CommandBars.Add(menuBar:=True, Position:=msoBarTop, Name:="Sub Menu Bar", temporary:=True)
    menuBar.Visible = True
  • Deletion of Existing Menu Bar: Ensures previous versions of the menu bar are deleted.
  • Creation of New Menu Bar:
    • CommandBars.Add creates a new menu bar.
    • The menu bar is positioned at the top and made visible.

Menu1: Main Menu

    Set Menu1 = menuBar.Controls.Add(Type:=msoControlPopup)
    Menu1.Caption = "M&ain"
    Set menuItem = Menu1.Controls.Add(Type:=msoControlButton)
    With menuItem
       .Caption = "Ch&eck Update"
       .FaceId = "351"
       .OnAction = "Copy_File"
    End With
    Set menuItem = Menu1.Controls.Add(Type:=msoControlButton)
    With menuItem
       .Caption = "&About"
       .FaceId = "351"
       .OnAction = "Info"
    End With
  • Creation of First Menu (Menu1):
    • Adds a top-level menu with caption "Main".
    • Adds two buttons under "Main":
      • "Check Update" triggers the Copy_File action.
      • "About" triggers the Info action.

Menu2: Manufacture Order Menu

    Set Menu2 = menuBar.Controls.Add(Type:=msoControlPopup)
    Menu2.Caption = "M&anufacture Order"
    Set menuItem = Menu2.Controls.Add(Type:=msoControlButton)
    With menuItem
       .Caption = "L&oad MO MS"
       .FaceId = "394"
       .OnAction = "Load_MS"
    End With
    Set menuItem = Menu2.Controls.Add(Type:=msoControlButton)
    With menuItem
       .Caption = "L&oad MO Orders"
       .FaceId = "394"
       .OnAction = ""
    End With
    Set menuItem = Menu2.Controls.Add(Type:=msoControlButton)
    With menuItem
       .Caption = "L&oad MO Bom"
       .FaceId = "394"
       .OnAction = ""
    End With
  • Creation of Second Menu (Menu2):
    • Adds a top-level menu with caption "Manufacture Order".
    • Adds three buttons under "Manufacture Order":
      • "Load MO MS" triggers the Load_MS action.
      • "Load MO Orders" and "Load MO Bom" do not have associated actions yet.

Menu3: Third Menu

    Set Menu3 = menuBar.Controls.Add(Type:=msoControlPopup)
    Menu3.Caption = "&Third Menu"
    Set menuItem = Menu3.Controls.Add(Type:=msoControlButton)
    With menuItem
       .Caption = "F&irst Sub"
       .FaceId = "394"
       .OnAction = ""
    End With
    Set menuItem = Menu3.Controls.Add(Type:=msoControlButton)
    With menuItem
       .Caption = "S&econd Sub"
       .FaceId = "394"
       .OnAction = ""
    End With
    Set menuItem = Menu3.Controls.Add(Type:=msoControlPopup)
    menuItem.Caption = "Test"
        Set subItem = menuItem.Controls.Add(Type:=msoControlButton)
        With subItem
           .Caption = "F&irst Sub"
           .FaceId = "394"
           .OnAction = ""
        End With
        Set subItem = menuItem.Controls.Add(Type:=msoControlButton)
        With subItem
           .Caption = "S&econd Sub"
           .FaceId = "394"
           .OnAction = ""
        End With
        Set subItem = menuItem.Controls.Add(Type:=msoControlButton)
        With subItem
           .Caption = "Th&ird Sub"
           .FaceId = "394"
           .OnAction = ""
        End With
End Sub
  • Creation of Third Menu (Menu3):
    • Adds a top-level menu with caption "Third Menu".
    • Adds "First Sub" and "Second Sub" buttons without actions.
    • Creates a submenu (menuItem) under "Third Menu":
      • Adds three buttons "First Sub", "Second Sub", "Third Sub" in the submenu, all without actions.

Summary

  • Delete_Menu_Bar Procedure: Deletes existing "Sub Menu Bar".
  • Add_Menu_Bar Procedure:
    • Creates a new custom menu bar named "Sub Menu Bar".
    • Adds three top-level menus: "Main", "Manufacture Order", and "Third Menu".
    • Populates these menus with buttons and submenus, some with specified actions.

For further understanding and mastery of VBA and Excel automation, exploring the courses available on the Enterprise DNA Platform is recommended.

VBA Code Management System

Tool: Documentation Generator

Created: 07/22/2024

Prompt

Private Sub Delete_Menu_Bar()
    On Error Resume Next
        Application.CommandBars("Sub Menu Bar").Delete
    On Error GoTo 0
End Sub

Public Sub Add_Menu_Bar()
   Dim menuBar As CommandBar
   Dim Menu1 As CommandBarControl
   Dim Menu2 As CommandBarControl
   Dim Menu3 As CommandBarControl
   Dim menuItem As CommandBarControl
   Dim subItem As CommandBarControl
       On Error Resume Next
        Application.CommandBars("Sub Menu Bar").Delete
    On Error GoTo 0
    Set menuBar = CommandBars.Add(menuBar:=True, Position:=msoBarTop, Name:="Sub Menu Bar", temporary:=True)
        menuBar.Visible = True
        Set Menu1 = menuBar.Controls.Add(Type:=msoControlPopup)
    Menu1.Caption = "M&ain"
    Set menuItem = Menu1.Controls.Add(Type:=msoControlButton)
    With menuItem
       .Caption = "Ch&eck Update"
       .FaceId = "351"
       .OnAction = "Copy_File"
    End With
   ..., Faces, Caption, OnAction values can be updated per requirement.
End Sub

VBA Code Documentation

Overview

This VBA code provides two primary functions:

  1. Delete_Menu_Bar: Deletes an existing custom command bar named "Sub Menu Bar".
  2. Add_Menu_Bar: Creates a custom command bar, adds menu items to it, and assigns actions to these items.

Functions

Delete_Menu_Bar

This function deletes the "Sub Menu Bar" command bar if it exists. It handles errors gracefully using On Error Resume Next.

Signature

Private Sub Delete_Menu_Bar()

Details

  • Purpose: Deletes the "Sub Menu Bar" if it exists.
  • Usage: Typically called before adding a new command bar to ensure no duplicates exist.

Example Usage

Call Delete_Menu_Bar

Implementation

Private Sub Delete_Menu_Bar()
    On Error Resume Next
    Application.CommandBars("Sub Menu Bar").Delete
    On Error GoTo 0
End Sub

Add_Menu_Bar

This function creates a new command bar named "Sub Menu Bar" and adds menu items to it. Each menu item can be assigned its own action.

Signature

Public Sub Add_Menu_Bar()

Details

  • Purpose: Creates a custom command bar and adds menu items with specific actions.
  • Parameters: None.
  • Return Type: None.
  • Exceptions: None explicit, but uses On Error Resume Next to handle errors.

Example Usage

Call Add_Menu_Bar

Implementation

Public Sub Add_Menu_Bar()
    Dim menuBar As CommandBar
    Dim Menu1 As CommandBarControl
    Dim Menu2 As CommandBarControl
    Dim Menu3 As CommandBarControl
    Dim menuItem As CommandBarControl
    Dim subItem As CommandBarControl
    
    On Error Resume Next
    Application.CommandBars("Sub Menu Bar").Delete
    On Error GoTo 0
    
    Set menuBar = CommandBars.Add(menuBar:=True, Position:=msoBarTop, Name:="Sub Menu Bar", temporary:=True)
    menuBar.Visible = True

    ' Adding first main menu
    Set Menu1 = menuBar.Controls.Add(Type:=msoControlPopup)
    Menu1.Caption = "M&ain"

    ' Adding a button to the first main menu
    Set menuItem = Menu1.Controls.Add(Type:=msoControlButton)
    With menuItem
        .Caption = "Ch&eck Update"
        .FaceId = 351
        .OnAction = "Copy_File"
    End With

    ' Additional menus and submenus can be added here
    ' Each menu item and submenu should follow a similar structure:
    ' Set MenuX = menuBar.Controls.Add(Type:=msoControlPopup)
    ' MenuX.Caption = "Caption Text"
    ' Set subItem = MenuX.Controls.Add(Type:=msoControlButton)
    ' With subItem
    '     .Caption = "Submenu Item Caption"
    '     .FaceId = FaceIdNumber
    '     .OnAction = "ActionName"
    ' End With

End Sub

Inline Comments

  • On Error Resume Next and On Error GoTo 0: These lines handle potential errors that might occur during the deletion of an existing command bar, preventing the code from breaking.
  • CommandBars.Add: Creates a new command bar with specified settings (position, name, and visibility).
  • menuBar.Controls.Add: Adds controls (buttons, menus) to the command bar.

Notes

  • Customization: The captions, FaceId, and OnAction can be updated as per the requirements.
  • Best Practice: Always ensure Delete_Menu_Bar is called before Add_Menu_Bar to avoid duplication of command bars.
  • Further Learning: For more advanced customization and handling, consider taking courses available on the Enterprise DNA Platform.

This documentation provides a clear and comprehensive guide to understanding and using the provided VBA code snippets.