可以修改 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 列并使用 '文本到列' ,在 数据标签. 分隔符将是“逗号”。
上面,一旦我们添加了适当的代码,将为我们提供左侧的基于级别的菜单结构。
在本练习中,第一级被任意放置在菜单栏的第十项,当工作簿显示完整宽度时,您将会看到这一点。
创建和销毁菜单
由于我们只需要这个特定工作簿的新菜单,我们将在打开和关闭工作簿时创建和销毁它们。
以下代码只是一个开始。它会在工作簿打开或关闭时触发。请将其复制到工作簿的一个模块中。
将 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



