在(Microsoft Excel)中(工具>宏)有一个名称为(记录宏)的菜单
如何通过宏代码禁用(录制宏)菜单?
答案 0 :(得分:1)
你可以使用这样的循环:
Dim ctl As CommandBarControl
For Each ctl In Application.CommandBars.FindControls(ID:=184)
ctl.Enabled = False
Next ctl
答案 1 :(得分:0)
对于Excel 2007+,您需要操作功能区。这和我能想到的一样好,Rory和我在评论中讨论的问题是他的答案是MacroRecord
命令可以添加到状态栏,状态栏不是功能区的一部分模型。黑客是禁用状态栏,但由于这是一个应用程序 -level属性,您需要一个事件处理程序来为其他工作簿重新启用它。
功能区XML 以禁用控件:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="ribbonOnLoad">
<commands>
<command idMso="MacroRecord"
enabled="false"
/>
</commands>
<ribbon>
<tabs>
<tab>
<group idMso="GroupMacros">
<button idMso="MacroRecord"
enabled="false"
/>
</group>
<group idMso="GroupCode">
<button idMso="MacroRecord"
enabled="false"
/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
标准模块中的VBA 来处理功能区回调和相关过程:
Option Explicit
Option Private Module
Public XLEvents As New cEventClass
'Callback for customUI.onLoad
Sub ribbonOnLoad(ribbon As IRibbonUI)
Call SetEventHandler
Call ToggleStatusBar(ThisWorkbook)
End Sub
Sub SetEventHandler()
If XLEvents.appevent Is Nothing Then
Set XLEvents.appevent = Application
End If
End Sub
Sub ToggleStatusBar(wb As Workbook, Optional ret$)
If (wb.Name = ThisWorkbook.Name) Then
Application.StatusBar = "Status Bar Disabled"
Else
Application.StatusBar = False
End If
End Sub
类模块中的VBA ,名为“cEventClass”,用于执行应用程序事件处理:
Option Explicit
Public WithEvents appevent As Application
Dim ret As String
Private Sub appevent_WorkbookActivate(ByVal wb As Workbook)
Call ToggleStatusBar(wb, ret)
End Sub