1. 程式人生 > 其它 >vba通過Application.CommandBars.FindControl的方法禁用選單和工具欄 接管系統命令

vba通過Application.CommandBars.FindControl的方法禁用選單和工具欄 接管系統命令

2018年9月30日22:23:58Excel vba通過Application.CommandBars.FindControl的方法禁用選單和工具欄 接管系統命令 圖文已關閉評論 6,741 views 微信公眾號 【EXCEL880】 QQ群【165159540】
課程諮詢 加我微信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