В (Microsoft Excel) в (Tools> Macro) Существует меню с именем (Record Macro)Как отключить (Record Macro) меню (по макрокодов)
Как отключить меню (Record Macro) с помощью макрокода?
В (Microsoft Excel) в (Tools> Macro) Существует меню с именем (Record Macro)Как отключить (Record Macro) меню (по макрокодов)
Как отключить меню (Record Macro) с помощью макрокода?
Вы можете использовать цикл как это:
Dim ctl As CommandBarControl
For Each ctl In Application.CommandBars.FindControls(ID:=184)
ctl.Enabled = False
Next ctl
Это, похоже, не работает для меня в Excel 2010. –
Также не работает в 2013 году – mrbungle
Он не будет работать за пределами 2003 года, я думаю. Вы больше не можете отключать панели команд. –
Для Excel 2007+, вам нужно управлять лентой. Это так хорошо, как я могу придумать, проблема в том, что Рори и я обсуждали в комментариях к его ответу, что команда 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
Ничего, я собирался попытаться с ним связать, но работа вытащила меня. Я хочу сохранить это в своей Evernote со всеми моими другими лентами/редакторами vba, которые у меня есть для некоторых приложений Access, которые мы разрабатываем здесь. Мне нравится иметь этот материал в моем backpocket :) – mrbungle
Что вы пробовали? Если это возможно, возможно, это нужно сделать через ленту, поэтому вам нужно будет изменить XML-файл ленты и добавить соответствующие обратные вызовы VBA для захвата и отключения этой команды. –
Почему вы хотите отключить макросы записи? Я не вижу причины для этого? – Sam
ну, давид справа. SO не предназначен для предоставления вам полных решений, но для помощи вам в работе с неисправными решениями, которые вы предоставили себе. Существуют инструменты (например, «Редактор пользовательского интерфейса для Microsoft Office»), которые позволяют редактировать структуру xml (ленты) – EngJon