调用堆栈中未显示的后台宏/子例程

时间:2015-11-05 08:13:48

标签: excel vba excel-vba

我有一张包含大量工作表和多个宏的工作簿。当我进入VBA并尝试将一个新Sub写入ThisWorkbook模块时,我看到:

  

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

假设某个项目当前正在运行。

如果我在打开文件后立即按Ctrl + L来检查调用堆栈,它只显示任何内容。

我自己没有运行任何宏,并且没有宏可以处理任何事件(只要我检查了项目中的所有工作表和模块),除了用于保存事件的小子:

Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean)

但是这个AFAIK应该在保存之前激活,这要归功于Captain Obvious。

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

Application.EnableEvents = False

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

已更新,以便在下方添加评论。

嗯,问题仍然存在,我感谢任何可能有助于找到这个完全隐藏的麻烦宏的想法。

嗯。有想法的人吗?

1 个答案:

答案 0 :(得分:0)

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

1)有一个在Workbook_Open()中初始化的公共变量 2)启用选项Notify Before State Loss(在Tools/Options/General下)

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

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

另一方面,您的项目似乎有更普遍的问题。 VBA项目可能会变得莫名其妙地腐败,这可能就是这种情况。有时可行的修复方法是导出所有模块,用户表单等,删除它们,然后重新导入它们。 Rob Bovey(一位备受尊敬的VBA大师)编写了一个名为Code Cleaner的加载项来自动化该过程。我还没有亲自使用它,但它可能值得一试。