调用堆栈中未显示的背景macros/子程序

我有一个有很多工作表和几个macros的工作簿。 当我进入VBA并尝试写入一个新的Sub到ThisWorkbook模块,我看到:

“这将重置您的项目,无论如何继续?”

假设一些项目正在运行。

如果我在打开文件后按Ctrl + L来查看调用堆栈,它什么都不显示。

我自己没有运行任何macros,并没有一个macros,它将处理任何事件(至于我检查项目中的所有工作表和模块),除了一个小的保存事件的子:

Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean) 

但是这个AFAIK只能在保存之前激活,这要感谢Obvious上尉。

这本书的另一个神秘的事情是对结构化表格进行exception缓慢的过滤,这可以通过closures事件处理程序来解决:

 Application.EnableEvents = False 

由于这两个事实都与事件有关,我想他们可能会以某种方式相互联系。

更新以包括下面的评论。

那么,问题依然存在,我感谢任何想法可能有助于find这个讨厌的macros运行完全隐藏。

嗯。 任何人有任何想法?

重现您描述的行为的一种方法如下:

1)有一个在Workbook_Open()初始化的公共variables2) Notify Before State Loss启用Notify Before State Loss启用Tools/Options/General (在Tools/Options/General

在这种情况下,当您第一次打开工作簿并尝试创build一个子时,即使没有macros正在运行,您也会看到有关重置项目的警告。

如果是这种情况,一个简单的修复(如果它仍然困扰你)是禁用Notify Before State Loss

另一方面,你的项目似乎有更多的一般问题。 VBA项目可能会变成莫名其妙的腐败,这可能是这种情况。 有时可以使用的修复方法是导出所有模块,用户表单等,删除它们,然后重新导入它们。 Rob Bovey(一位备受推崇的VBA专家)编写了一个名为Code Cleaner的插件来实现这个过程的自动化。 我没有亲自使用它,但可能值得一试。