如何动态禁用和启用宏?

时间:2011-09-28 07:44:10

标签: excel vba excel-vba visibility

我想测试一下我制作的Excel VBA应用程序 然而,VBA代码在细胞的可见性方面变得混乱,这在编辑工作表时是一种害虫。

是否有选项可以在不必

的情况下即时启用和禁用宏
Close the sheet
Change the macro settings
Reopen the sheet
Close the sheet
Change the macro settings.
etc.

6 个答案:

答案 0 :(得分:10)

据我所知,您无法动态启用/禁用已打开的工作簿中的宏
但是,您不应该这样做,因为只有用户点击才能触发宏。

我将看到的唯一案例是事件程序(Worksheet_Change或其他) 然后,您可以创建激活/停用事件的程序,并通过作业簿中的按钮调用它们:

Sub enableEvents()
    Application.EnableEvents = True
End Sub

Sub disableEvents()
    Application.EnableEvents = False
End Sub

您还可以使用您根据需要更改的全局变量从Chris Pearson website尝试这些提示:

Public AbortChangeEvent As Boolean

然后检查是否:

Private Sub Worksheet_Change(ByVal Target As Range)
    If AbortChangeEvent = True Then
        Exit Sub
    End If
    '
    ' rest of code here
    '
End Sub

答案 1 :(得分:4)

当您打开文档以禁用宏时,您也可以按住 SHIFT

答案 2 :(得分:2)

要动态禁用宏,请通过VBA编辑器中的立即窗口使用“Application.EnableEvents = False”(以及“Application.EnableEvents = True”将其重新打开)。

答案 3 :(得分:1)

从Excel 2010 *开始,“开发人员”选项卡上实际上有一个选项,允许您像ABC一样简单地禁用宏。 Design Mode lets you do just that!

*甚至可能是早期版本。

答案 4 :(得分:1)

我经常在打开工作簿时触发宏,但有时我不希望宏触发,因此我可以处理代码。因此,我将宏放在单独的工作簿中,该工作簿执行以下操作:

  1. 禁用宏
  2. 打开有问题的工作簿
  3. 启用宏
  4. 然后关闭原始工作簿
  5. 打开第二个工作簿 这是代码:
Sub OpenClose()

    'Opens Workbook below with Macors disabled

    'After it is open Macros are enabled

    'This Workbook then closes without saving changes, leaving only the workbook below open

    '************************************************************
    'User only needs to change the workbook name on the next line
    WorkbookToOpenNoMacros = "Gaby.xlsm"
    '************************************************************

    Dim wb As Workbook

    Set wb = Application.ThisWorkbook

    Application.EnableEvents = False

    Application.Workbooks.Open (ActiveWorkbook.Path & "\" & WorkbookToOpenNoMacros)

    Application.EnableEvents = True

    wb.Saved = True

    wb.Close SaveChanges:=False

End Sub

答案 5 :(得分:0)

我有Office 2013,我在VBA窗口找到了一个按钮,非常容易为我做这件事。

工具栏上有播放,暂停和停止按钮。在Excel中,它们实际上被称为“运行宏,中断和重置”。

单击“中断”按钮(暂停),任何正在运行的宏都应该停止运行。我只在一个宏上测试过它,但似乎有理由认为这一般会起作用。

另外,我相信这些按钮适用于许多版本的Excel,因此值得检查早期版本。