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

2018年9月30日22:23:58Excel vba通过Application.CommandBars.FindControl的方法禁用菜单和工具栏 接管系统命令 图文已关闭评论 4,783 views
表格 定制  数据 合并 处理 分析 VBA 编程 开发 网页
表格 定制  数据 合并 处理 分析 VBA 编程 开发 网页

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

 

  • 郑广学老师微信号
  • EXCEL880B
  • weinxin
  • 我的微信公众号
  • EXCEL880
  • weinxin