从 Excel VBA 损坏和自动化错误中恢复

问题描述

我有一个 Excel 工作簿,里面有很多东西——宏、外部和实时数据源等等——在上个月大约每周都会出现一次故障。

损坏通常在运行宏并获取时表现出来:

Run-time error '-2147319767 (80028029)':

Automation error
Invalid forward reference,or reference to uncompiled type.

调试器确定的故障点从来没有意义——同样的代码已经运行了数周。我一直在使用的修复方法是回滚到工作簿的已保存版本,该版本不会在运行宏时引发错误,并且它始终包含与破坏完全相同的 VBA 代码。所以我得出结论,幕后的某些东西正在被破坏。

这是怎么回事?有没有办法避免这种情况?有没有比回滚到工作簿的早期保存版本更好的修复方法

解决方法

关于此错误的 questions 有很多,修复它们的代码更改也没有任何意义。它们的一个共同点是对 VBA 代码进行了更改,one deduces 会强制 Excel 重新生成其伪代码。

进一步的研究导致人们经常提到 Excel 工作簿损坏,以及一个名为 Excel VBA Code Cleaner 的免费实用程序。该实用程序的作者解释了发生了什么:

在创建 VBA 程序的过程中生成了大量垃圾代码 在您的文件中。如果你不定期清理你的文件,你会 开始体验由这个额外行李引起的奇怪问题。 清理项目涉及导出其所有内容 VBComponents转文本文件,删除组件再导入 从文本文件返回组件。

不幸的是,他们尚未发布可在 64 位 Excel 中运行的实用程序版本。但是可以手动执行相同的操作 - 保存所有 VB 代码,删除所有模块,然后重新创建它们并将代码粘贴回去。

更新: VBA Code Decompiler 是另一个似乎可以完成相同任务的免费软件实用程序。还有关于 Office 如何编译 VBA 代码并将其保留在其文件中的更详细说明。