如何禁用(录制宏)菜单(通过宏代码)
How to disable (Record Macro) menu (by macro codes)
在 (Microsoft Excel) 在(工具 > 宏)中有一个名为(录制宏)的菜单
如何通过宏代码禁用(录制宏)菜单?
您可以使用这样的循环:
Dim ctl As CommandBarControl
For Each ctl In Application.CommandBars.FindControls(ID:=184)
ctl.Enabled = False
Next ctl
对于Excel 2007+,您需要操作功能区。这是我所能想到的,我和 Rory 在对他的回答的评论中讨论的问题是 MacroRecord
命令可以添加到状态栏,而状态栏不是功能区的一部分模型。黑客是禁用状态栏,但由于这是一个 应用程序 级别 属性,您需要一个事件处理程序来为其他工作簿重新启用它。
功能区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 在 Class 模块中 调用 "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
在 (Microsoft Excel) 在(工具 > 宏)中有一个名为(录制宏)的菜单
如何通过宏代码禁用(录制宏)菜单?
您可以使用这样的循环:
Dim ctl As CommandBarControl
For Each ctl In Application.CommandBars.FindControls(ID:=184)
ctl.Enabled = False
Next ctl
对于Excel 2007+,您需要操作功能区。这是我所能想到的,我和 Rory 在对他的回答的评论中讨论的问题是 MacroRecord
命令可以添加到状态栏,而状态栏不是功能区的一部分模型。黑客是禁用状态栏,但由于这是一个 应用程序 级别 属性,您需要一个事件处理程序来为其他工作簿重新启用它。
功能区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 在 Class 模块中 调用 "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