如何通过 VBA 在 Excel 工作表中创建自定义菜单

立即分享:

可以修改 Excel 功能区以适应特定的工作。 本练习创建新菜单,将用户指向与其任务相关的特定工作表。

在本文中,我们将介绍如何在 Excel 工作表中创建自定义菜单,如下所示:在 Excel 工作表中创建自定义菜单

本文假定读者已显示开发人员功能区并且熟悉 VBA 编辑器。 如果没有,请谷歌“Excel Developer Tab”或“Excel Code Window”。

工作簿

要使用的工作簿有许多工作表。 我们建议您使用此处找到的示例。 看起来像这样。样本工作簿

前四张纸功能失调,在本练习中仅用于导航目的。

第五张表将包含此工作簿特有的自定义菜单结构。 目前它应该是空白的,除了测试按钮。

添加菜单结构

将以下文本块复制到工作表“MenuSheet”的单元格 A1 中。

级别、标题、位置/宏、分隔符

1,&用户工具,10

2,Show Dashboard,选择Dashboard

2,新增, ,TRUE

3、Client,选择Client

3、位置,选择位置

3、Manager,选择Manager

2、关闭、关闭文件

格式化菜单结构

此 CSV 数据最终出现在 A 列中。要将其格式化为单独的 Excel 单元格,请选择 A 列并使用 '文本到列' ,在 数据标签. 分隔符将是“逗号”。将其格式化为单独的 Excel 单元格

上面,一旦我们添加了适当的代码,将为我们提供左侧的基于级别的菜单结构。基于级别的菜单结构

在本练习中,第一级被任意放置在菜单栏的第十项,当工作簿显示完整宽度时,您将会看到这一点。

创建和销毁菜单

由于我们只需要这个特定工作簿的新菜单,我们将在打开和关闭工作簿时创建和销毁它们。

以下代码只是一个开始。它会在工作簿打开或关闭时触发。请将其复制到工作簿的一个模块中。

将 MenuSheet 上的测试按钮分配给 Auto_Open。

Option Explicit

Sub auto_Open()
    Call DeleteMenu
    Call CreateMenu
 End Sub
 
Sub auto_Close()
    Call DeleteMenu
End Sub

下面,我们更仔细地检查我们的菜单结构。更仔细地检查我们的菜单结构

没有宏被触发 新增 因为它除了作为子菜单的父项外没有其他功能。

这种菜单结构易于维护。 只需使用宏添加新项目,注意菜单级别。

守则

将以下 VBA 代码附加到模块。 这将检查“MenuSheet”并创建自定义菜单。

Sub CreateMenu()
'   Called from Auto_Open. 'NOTE: There is no error handling in this subroutine
    Dim MenuSheet As Worksheet
    Dim MenuObject As CommandBarPopup

    Dim MenuItem As Object
    Dim SubMenuItem As CommandBarButton
    Dim sRow As Integer
    Dim MenuLevel, NextLevel, PositionOrMacro, Caption, Divider

    Set MenuSheet = ThisWorkbook.Sheets("MenuSheet")
    Call DeleteMenu

    sRow = 2 '   start row
    
'   Add menus using the structure as per the MenuSheet
    Range("A" & sRow).Select
    Do While ActiveCell > "" '****************
        With MenuSheet
            MenuLevel = .Cells(sRow, 1)
            Caption = .Cells(sRow, 2)
            PositionOrMacro = .Cells(sRow, 3)
            Divider = .Cells(sRow, 4)
            NextLevel = .Cells(sRow + 1, 1)
        End With
        
        Select Case MenuLevel
            Case 1 ' Add the top-level menu to the Worksheet CommandBar
                Set MenuObject = Application.CommandBars(1). _
                    Controls.Add(Type:=msoControlPopup, _
                    Before:=PositionOrMacro, _
                    Temporary:=True)
                MenuObject.Caption = Caption
            Case 2 ' A Menu Item
                If NextLevel = 3 Then
                    Set MenuItem = MenuObject.Controls.Add(Type:=msoControlPopup)
                Else
                    Set MenuItem = MenuObject.Controls.Add(Type:=msoControlButton)
                    MenuItem.OnAction = PositionOrMacro
                End If
                MenuItem.Caption = Caption
                If Divider Then MenuItem.BeginGroup = True
            Case 3 ' A SubMenu Item
                Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
                SubMenuItem.Caption = Caption
                SubMenuItem.OnAction = PositionOrMacro
                
                If Divider Then SubMenuItem.BeginGroup = True
        End Select
        sRow = sRow + 1
        Range("A" & sRow).Select '***************************************
    Loop
    Sheets("Dashboard").Activate
End Sub

Sub DeleteMenu()
'   This sub will be executed when the workbook is closing
    Dim MenuSheet As Worksheet
    Dim sRow As Integer
    Dim Caption As String
    
    On Error Resume Next
    Set MenuSheet = ThisWorkbook.Sheets("MenuSheet")
    sRow = 2
    Range("A" & sRow).Select
    Do While ActiveCell > ""
        If MenuSheet.Cells(sRow, 1) = 1 Then
            Caption = MenuSheet.Cells(sRow, 2)
            Application.CommandBars(1).Controls(Caption).Delete
        End If
        sRow = sRow + 1
        Range("A" & sRow).Select
    Loop
   
    On Error GoTo 0
End Sub

Sub SelectDashboard()
    Sheets("Dashboard").Activate
End Sub
Sub SelectClient()
    Sheets("Client").Activate
End Sub

Sub SelectLocation()
    Sheets("Location").Activate
End Sub

Sub SelectManager()
    Sheets("Manager").Activate
End Sub

Sub CloseFile()
    MsgBox "Close! (write your own code in the module)"
End Sub

使用测试按钮测试代码。 新创建的用户菜单将位于菜单位置 10,在加载项下。

Excel恢复

Excel 有时不稳定,打开时崩溃,损坏源文件。 在恢复文件失败的地方,有一个工具来修复是很有用的 Excel损坏 否则所有未备份的工作都将丢失。

作者简介:

Felix Hooker 是一位数据恢复专家 DataNumen, Inc.,它是数据恢复技术领域的世界领先者,包括 修复rar 和sql恢复软件产品。 欲了解更多信息,请访问 datanumen.com

立即分享:

评论被关闭。