Excel vba通过Application.CommandBars.FindControl的方法禁用菜单和工具栏 接管系统命令 图文

2018年9月30日22:23:58Excel vba通过Application.CommandBars.FindControl的方法禁用菜单和工具栏 接管系统命令 图文已关闭评论 5,961 views
微信公众号 【EXCEL880】 QQ群【165159540】
Excel课程咨询 请加郑广学老师微信EXCEL880B

本文内容中的所有示例都使用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