要实现保存自定义菜单名并隐藏 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
使用步骤
- 打开 Excel 工作簿。
- 按 Alt + F11 打开 VBA 编辑器。
- 在 VBA 编辑器中,插入一个新模块(点击 Insert > Module),并粘贴模块代码。
- 双击左侧的 ThisWorkbook,在右侧代码窗口中粘贴 ThisWorkbook 代码。
- 保存工作簿并关闭 VBA 编辑器。
- 重新打开工作簿时,会自动创建自定义菜单并隐藏系统菜单栏。
功能说明
- Workbook_Open 事件:打开工作簿时,自动创建自定义菜单并隐藏系统菜单栏。
- Workbook_BeforeClose 事件:关闭工作簿时,删除自定义菜单并恢复系统菜单栏。
- HideSystemMenu 和 ShowSystemMenu:分别用于隐藏和显示 Excel 的系统菜单栏。
注意事项
- 自定义菜单是临时的,关闭 Excel 后会消失。如果需要永久保存,可以将菜单配置信息保存在工作表的某个区域或隐藏的工作表中。
- 隐藏系统菜单栏后,用户无法使用 Excel 的系统功能(如“文件”、“开始”等)。如果需要恢复菜单栏,可以运行 ShowSystemMenu 宏。