课程咨询 加我微信EXCEL880B 试学网址http://v.excel880.com
本文内容中的所有示例都使用False来禁用命令栏控件,若想启用该控件则将其改为True。
本方法只在2003有效 2010以上版本部分有效 另外2010版以上功能区菜单无法禁用
禁用某命令栏
下面的代码将禁用“工作表菜单栏”:
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
On Error Resume Next
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
重置某内置控件将恢复该控件的原始行为及其属性。重置内置的命令栏将移除自定义控件并恢复内置控件。
Sub aaa()
Dim aa, bb As Boolean
aa = True
bb = False
Application.CommandBars("ply").Enabled = aa
'右键点工作表标签是否可用
Application.CommandBars("cell").Enabled = aa
'右键点单元格是否可用
Application.CommandBars("toolbar list").Enabled = aa
'右键点工具栏及“视图”-“工具栏”是否可用
Application.CommandBars("autocalculate").Enabled = aa
'右键点状态栏是否可用
Application.CommandBars("worksheet menu bar").Enabled = aa
Application.CommandBars(1).Enabled = aa
'以上两句的作用都是把菜单取消
Application.CommandBars(2).Enabled = aa
'暂时未知
Application.CommandBars(3).Enabled = aa
'常用工具栏是否可用
Application.CommandBars(3).Controls(3).Enabled = aa
'使常用工具栏中第三个“保存”是否可用
Application.CommandBars(4).Enabled = aa
'格式工具栏是否可用
Application.CommandBars(5).Enabled = aa
'暂时未知
Application.CommandBars(1).Enabled = aa
'恢复菜单可用
Application.CommandBars(1).Controls(1).Enabled = aa
'使菜单中的“文件”是否可用
Application.CommandBars("file").Controls("页面设置(&U)...").Enabled = aa
'菜单中的“文件”中的“页面设置”是否可用
Application.CommandBars(1).Controls(4).Enabled = aa
'菜单中的第四个“插入”是否可用
Application.CommandBars(1).Controls(4).Caption = "victor"
'更改名称
Application.CommandBars(1).Reset
'恢复菜单
Application.DisplayFormulaBar = aa
'编辑栏是否显示
Application.DisplayStatusBar = aa
'状态栏是否显示
ActiveWindow.DisplayHeadings = aa
'行号列标是否显示
ActiveWindow.DisplayWorkbookTabs = aa
'工作表标签是否显示
ActiveWindow.DisplayHorizontalScrollBar = aa
'水平滚动条是否显示
ActiveWindow.DisplayVerticalScrollBar = aa
'垂直滚动条是否显示
Application.Caption = "工资统计系统"
'标题栏中的“Microsoft Excel”更换为“工资统计系统”
End Sub