鲍勃正在使用宏在工作簿中处理信息。他希望宏打开其中包含AutoClose宏的第二个工作簿,但是他不希望在关闭第二个工作簿时运行它。

他正在寻找一种方法在第一个工作簿中的宏的控制下打开第二个工作簿,而不启用第二个工作簿中的宏。

在宏控制下打开它时,无法禁用第二个工作簿中的宏。 (如果您手动打开它,显然可以在工作簿打开时按住Shift键,但这对您的宏没有帮助-它没有手指可以按下该键!)

但是,有两种解决方法。第一个涉及以这种方式修改关闭第二个工作簿的代码:

Application.EnableEvents = False Workbooks("SecondBook.xls").Close Application.EnableEvents = True

通过将EnableEvents属性设置为False,将要发生的事件(关闭工作簿)将不会触发AutoClose宏。

您可以(并且应该)然后将EnableEvents属性设置为True,以便事件以后可以继续。

另一个解决方法是在第二个工作簿的AutoClose宏中设置某种“标志”。此标志可以测试以查看第一个工作簿是否打开,如果打开,则不运行AutoClose宏中的主代码。

为此,请在模块页面顶部的第二个工作簿中添加以下代码:

Dim AutoCloseDisabled as Boolean Sub DisableAutoClose()

AutoCloseDisabled=True End Sub

请注意,AutoCloseDisabled变量的声明语句在任何过程之外,这意味着它将是全局范围的,并且可以在所有过程中访问。

接下来,修改AutoClose宏,使其主体包含在If语句内,如下所示:

Sub AutoClose()

'variable declarations here

If Not AutoCloseDisabled then

'body of AutoClose here

End if End Sub

这个想法是当第二个工作簿正常打开时,AutoCloseDisabled变量将自动设置为False。 (布尔变量在声明时默认为False。)由于DisableAutoClose过程从不在工作簿中运行,因此AutoClose宏中的If语句允许执行宏的实际主体。

如果您从第一个工作簿中打开第二个工作簿,则第一个工作簿中的代码可以调用第二个工作簿中的DisableAutoClose宏,从而将AutoCloseDisabled标志设置为True。这意味着当第二个工作簿关闭时,If语句将跳过AutoClose宏的主体。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(10232)适用于Microsoft Excel 2007和2010。您可以在下面的Excel的较旧菜单界面中找到此技巧的版本: