2015-04-23 2 views
-3

В (Microsoft Excel) в (Tools> Macro) Существует меню с именем (Record Macro)Как отключить (Record Macro) меню (по макрокодов)

Как отключить меню (Record Macro) с помощью макрокода?

+0

Что вы пробовали? Если это возможно, возможно, это нужно сделать через ленту, поэтому вам нужно будет изменить XML-файл ленты и добавить соответствующие обратные вызовы VBA для захвата и отключения этой команды. –

+0

Почему вы хотите отключить макросы записи? Я не вижу причины для этого? – Sam

+2

ну, давид справа. SO не предназначен для предоставления вам полных решений, но для помощи вам в работе с неисправными решениями, которые вы предоставили себе. Существуют инструменты (например, «Редактор пользовательского интерфейса для Microsoft Office»), которые позволяют редактировать структуру xml (ленты) – EngJon

ответ

1

Вы можете использовать цикл как это:

Dim ctl As CommandBarControl 

For Each ctl In Application.CommandBars.FindControls(ID:=184) 
    ctl.Enabled = False 
Next ctl 
+1

Это, похоже, не работает для меня в Excel 2010. –

+1

Также не работает в 2013 году – mrbungle

+0

Он не будет работать за пределами 2003 года, я думаю. Вы больше не можете отключать панели команд. –

0

Для 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 
+0

Ничего, я собирался попытаться с ним связать, но работа вытащила меня. Я хочу сохранить это в своей Evernote со всеми моими другими лентами/редакторами vba, которые у меня есть для некоторых приложений Access, которые мы разрабатываем здесь. Мне нравится иметь этот материал в моем backpocket :) – mrbungle

Смежные вопросы