vba通過Application.CommandBars.FindControl的方法禁用選單和工具欄 接管系統命令
課程諮詢 加我微信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