禁用菜单和工具栏
提示:本文内容中的所有示例都使用False来禁用命令栏控件,若想启用该控件则将其改为True。
禁用某命令栏
下面的代码将禁用“工作表菜单栏”:
Application.CommandBars(”Worksheet Menu Bar”).Enabled = False
下面的代码将禁用“标准”工具栏:
Application.CommandBars(”Standard”).Enabled = False
下面的代码将禁用单元格快捷菜单(即在单元格中右击后出现的菜单):
Application.CommandBars(”Cell”).Enabled = False
注意:在代码中,必须使用命令栏的英文名称。如果使用其本地名称,则代码不会运行。
在网上有很多例子,列出了Excel的命令栏名称。您也可以使用下面的代码,列出Excel命令栏的英文名称和本地名称。
Sub Get_Commandbars_Names()
Dim Cbar As CommandBar
Dim NewWS As Worksheet
Dim RNum As Long RNum = 1
Set NewWS = Worksheets.Add
On Error Resume Next
ActiveSheet.Name = “CommandBarNames”
On Error GoTo 0 For Each Cbar In Application.CommandBars
NewWS.Cells(RNum, “A”).Value = Cbar.Name
NewWS.Cells(RNum, “B”).Value = Cbar.NameLocal
RNum = RNum + 1
Next Cbar NewWS.Columns.AutoFit
End Sub
禁用所有的命令栏
下面的代码将禁用所有的命令栏:
Sub Disable_Command_Bars_1()
‘禁用所有的命令栏
Dim Cbar As CommandBar
For Each Cbar In Application.CommandBars
Cbar.Enabled = False
Next
End Sub
禁用某菜单或控件
如果想要禁用指定的菜单或控件,则必须知道并使用它们的Id。
在下面的地址中可以找到这些资源:
点击下载显示所有图标及ID号的工作簿
点击下载显示命令栏及ID的加载宏
(1)禁用菜单工具栏中的某菜单
下面用两种方式禁用菜单工具栏中的“文件”菜单
1)使用命令栏控件的名称
Application.CommandBars(”Worksheet Menu Bar”).Controls(”文件(F)”).Enabled = False
注意,代码中控件的名称应该使用本地名称,比如中文版的Excel则使用”文件(F)”。
2)使用命令栏控件的ID数字(这种方式适用于所有语言的Excel版本)
Application.CommandBars(”Worksheet Menu Bar”).FindControl(ID:=30002).Enabled = False
由于所使用控件的ID号30002是唯一的,因此可直接使用FindControl方法:
Application.CommandBars.FindControl(ID:=30002).Enabled = False
(2)下面的代码禁用“视图”菜单下的“全屏显示”菜单项:
Application.CommandBars(”Worksheet Menu Bar”).FindControl _
(ID:=178, Recursive:=True).Enabled = False
代码中,使用Recursive:=True在工作表菜单栏中的所有子菜单中查找。
下面的代码仅禁用“标准”工具栏中的“复制”按钮控件:
Application.CommandBars(”Standard”).FindControl _
(ID:=19).Enabled = False
下面的代码禁用所有命令栏中的“复制”控件,包括菜单栏、工具栏和快捷菜单。
在Excel 2000-2003版本中,使用下面的代码(使用Office.CommandBarControl):
Sub MenuControl_False()
‘ Excel 2000 - 2003
Dim Ctrl As Office.CommandBarControl
For Each Ctrl In Application.CommandBars.FindControls(ID:=19)
Ctrl.Enabled = False
Next Ctrl
End Sub
如果要在Excel 97中使用,则使用下面的代码:
Sub MenuControl_Enabled_False()
‘ Excel 97 - 2003
Dim Ctl As CommandBarControl
Dim Cbar As Integer
For Cbar = 1 To Application.CommandBars.Count
For Each Ctl In Application.CommandBars(Cbar).Controls
Application.CommandBars(Cbar).FindControl(ID:=19, _
Recursive:=True).Enabled = False
Next Ctl
Next Cbar
On Error GoTo 0
End Sub
其他
1) 隐藏公式编辑栏和状态栏
Application.DisplayFormulaBar = False
Application.DisplayStatusBar = False
2) 禁用快捷键
可以使用Application.OnKey进行处理。例如,要禁用“复制”的快捷键(Ctrl+C),则使用下面的代码:
Application.OnKey “^c”, “”
要恢复快捷键,则使用:
Application.OnKey “^c”
4) 禁用工作表菜单栏和其它工具栏上的右击键
Application.CommandBars(”Toolbar List”).Enabled = False
5) 阻止用户打开“自定义”对话框
Application.CommandBars.DisableCustomize = True
避免了用户通过右击工具栏或使用“自定义”菜单项打开“自定义”对话框。
6) 禁用工作表菜单栏中“键入需要帮助的问题”:
Application.CommandBars.DisableAskAQuestionDropdown = True
运行代码后,该下拉框将隐藏。
7) 重置命令栏
Application.CommandBars(”Worksheet Menu Bar”).Reset
重置某内置控件将恢复该控件的原始行为及其属性。重置内置的命令栏将移除自定义控件并恢复内置控件。
