达永编程网

程序员技术分享与交流平台

用VBA如何在 Excel 表格中实现自定义菜单名并隐藏 Excel 系统菜单名

要实现保存自定义菜单名并隐藏 Excel 系统菜单名,可以通过以下步骤完成:


1. 保存自定义菜单名

自定义菜单名是临时创建的,关闭 Excel 后会消失。如果需要保存自定义菜单名,可以通过以下方法实现:

  • 将菜单创建代码放在 Workbook_Open 事件中,这样每次打开工作簿时都会自动创建菜单。
  • 将菜单配置信息(如菜单名和工作表名称)保存在工作表的某个区域或隐藏的工作表中,以便在需要时读取。

2. 隐藏 Excel 系统菜单名

可以通过 VBA 隐藏 Excel 的系统菜单栏(如“文件”、“开始”等)。以下是实现代码:


完整代码实现

模块代码

' VBA

Sub AddCustomMenuItems()
    Dim cBar As CommandBar
    Dim cButton As CommandBarButton
    Dim i As Integer
    Dim menuNames As Variant
    Dim sheetNames As Variant

    ' 定义菜单项名称和工作表名称
    menuNames = Array("成品库存一", "成品库存二", "成品库存三", "成品库存四", "成品库存五", "成品库存六", "成品库存七", "成品库存八")
    sheetNames = Array("表一", "表二", "表三", "表四", "表五", "表六", "表七", "表八")

    ' 获取 Excel 的菜单栏
    Set cBar = Application.CommandBars("Worksheet Menu Bar")

    ' 添加菜单项
    For i = LBound(menuNames) To UBound(menuNames)
        Set cButton = cBar.Controls.Add(Type:=msoControlButton, Before:=1)
        With cButton
            .Caption = menuNames(i) ' 设置菜单项名称
            .Style = msoButtonCaption ' 设置样式为文本
            .OnAction = "MenuClickHandler" ' 设置点击事件的处理程序
            .Parameter = sheetNames(i) ' 将工作表名称作为参数传递
        End With
    Next i
End Sub

Sub MenuClickHandler()
    Dim sheetName As String
    Dim ws As Worksheet
    Dim ctrl As CommandBarControl

    ' 获取当前点击的菜单项
    On Error Resume Next
    Set ctrl = Application.CommandBars.ActionControl
    On Error GoTo 0

    If Not ctrl Is Nothing Then
        ' 获取菜单项的参数(工作表名称)
        sheetName = ctrl.Parameter

        ' 检查工作表是否存在
        On Error Resume Next
        Set ws = ThisWorkbook.Sheets(sheetName)
        On Error GoTo 0

        If Not ws Is Nothing Then
            ' 如果工作表存在,则激活它
            ws.Activate
        Else
            ' 如果工作表不存在,提示错误
            MsgBox "工作表 '" & sheetName & "' 不存在!", vbExclamation
        End If
    Else
        ' 如果无法获取菜单项,提示错误
        MsgBox "无法获取当前点击的菜单项!", vbExclamation
    End If
End Sub

Sub RemoveCustomMenuItems()
    Dim cBar As CommandBar
    Dim ctrl As CommandBarControl

    ' 获取 Excel 的菜单栏
    Set cBar = Application.CommandBars("Worksheet Menu Bar")

    ' 删除所有自定义菜单项
    For Each ctrl In cBar.Controls
        If Left(ctrl.Caption, 5) = "成品库存" Then
            ctrl.Delete
        End If
    Next ctrl
End Sub

Sub HideSystemMenu()
    ' 隐藏 Excel 的系统菜单栏
    Application.CommandBars("Worksheet Menu Bar").Enabled = False
End Sub

Sub ShowSystemMenu()
    ' 显示 Excel 的系统菜单栏
    Application.CommandBars("Worksheet Menu Bar").Enabled = True
End Sub

ThisWorkbook 代码

将以下代码放在 ThisWorkbook 的代码窗口中,以便在打开工作簿时自动创建菜单并隐藏系统菜单栏:

' VBA

Private Sub Workbook_Open()
    ' 添加自定义菜单项
    Call AddCustomMenuItems
    ' 隐藏系统菜单栏
    Call HideSystemMenu
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ' 删除自定义菜单项
    Call RemoveCustomMenuItems
    ' 显示系统菜单栏
    Call ShowSystemMenu
End Sub

使用步骤

  1. 打开 Excel 工作簿。
  2. Alt + F11 打开 VBA 编辑器。
  3. 在 VBA 编辑器中,插入一个新模块(点击 Insert > Module),并粘贴模块代码。
  4. 双击左侧的 ThisWorkbook,在右侧代码窗口中粘贴 ThisWorkbook 代码。
  5. 保存工作簿并关闭 VBA 编辑器。
  6. 重新打开工作簿时,会自动创建自定义菜单并隐藏系统菜单栏。

功能说明

  1. Workbook_Open 事件:打开工作簿时,自动创建自定义菜单并隐藏系统菜单栏。
  2. Workbook_BeforeClose 事件:关闭工作簿时,删除自定义菜单并恢复系统菜单栏。
  3. HideSystemMenuShowSystemMenu:分别用于隐藏和显示 Excel 的系统菜单栏。

注意事项

  1. 自定义菜单是临时的,关闭 Excel 后会消失。如果需要永久保存,可以将菜单配置信息保存在工作表的某个区域或隐藏的工作表中。
  2. 隐藏系统菜单栏后,用户无法使用 Excel 的系统功能(如“文件”、“开始”等)。如果需要恢复菜单栏,可以运行 ShowSystemMenu 宏。
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言