我有一张包含大量工作表和多个宏的工作簿。当我进入VBA并尝试将一个新Sub写入ThisWorkbook模块时,我看到:
“这会重置您的项目,无论如何都要继续?”
假设某个项目当前正在运行。
如果我在打开文件后立即按Ctrl + L来检查调用堆栈,它只显示任何内容。
我自己没有运行任何宏,并且没有宏可以处理任何事件(只要我检查了项目中的所有工作表和模块),除了用于保存事件的小子:
Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean)
但是这个AFAIK应该在保存之前激活,这要归功于Captain Obvious。
本书另一个神秘的事情是对结构化表格进行异常缓慢的过滤,这可以通过关闭事件处理程序来解决:
Application.EnableEvents = False
由于这两个事实都与事件有关,我猜他们可能会以某种方式相互联系。
已更新,以便在下方添加评论。
嗯,问题仍然存在,我感谢任何可能有助于找到这个完全隐藏的麻烦宏的想法。
嗯。有想法的人吗?
答案 0 :(得分:0)
重现您描述的行为的一种方法如下:
1)有一个在Workbook_Open()
中初始化的公共变量
2)启用选项Notify Before State Loss
(在Tools/Options/General
下)
在这种情况下,当您第一次打开工作簿并尝试创建子工作时,即使当前没有宏正在运行,您也会看到有关重置项目的警告。
如果是这种情况,一个简单的修复(如果它仍然困扰你)就是禁用Notify Before State Loss
。
另一方面,您的项目似乎有更普遍的问题。 VBA项目可能会变得莫名其妙地腐败,这可能就是这种情况。有时可行的修复方法是导出所有模块,用户表单等,删除它们,然后重新导入它们。 Rob Bovey(一位备受尊敬的VBA大师)编写了一个名为Code Cleaner的加载项来自动化该过程。我还没有亲自使用它,但它可能值得一试。