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



我有一个Excel工作簿,里面有很多内容——宏、外部和实时数据源等——在过去的一个月里,它大约每周都会崩溃一次。

破坏通常在运行宏并获得时表现出来

Run-time error '-2147319767 (80028029)':
Automation error
Invalid forward reference, or reference to uncompiled type.

调试器确定的故障点永远没有意义——相同的代码已经工作了好几个星期。我一直在使用的修复方法是回滚到工作簿的保存版本,该版本在运行宏时不会引发错误,而且它总是包含完全相同的VBA代码。因此,我得出的结论是,幕后的某些东西正在被破坏。

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

关于这个错误有很多问题,修复这些问题的代码更改也没有意义。它们的一个共同点是,它们对VBA代码进行了更改,从而迫使Excel重新生成其伪代码。

进一步的研究导致人们经常提到Excel工作簿损坏,以及一个名为Excel VBA代码清理器的免费实用程序。该实用程序的作者解释了正在发生的事情:

在创建VBA程序的过程中,生成了许多垃圾代码在您的文件中。如果你不定期清理文件,你会开始体验这种额外的行李带来的奇怪问题。清理项目涉及导出项目的所有内容VBComponents转换为文本文件,删除组件,然后导入从文本文件返回组件。

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

UPDATE:VBA代码分解器是另一个似乎可以完成相同任务的免费软件实用程序。还有关于Office如何编译VBA代码并在其文件中持久化VBA代码的更详细描述。

为我修复的是:

  1. 确保您没有处于调试模式,然后将不会运行的模块重命名,例如从"MyModule"重命名为"MyModuleOLD">
  2. 使用原始名称创建一个新模块,例如"MyModule">
  3. 将代码从旧模块复制并粘贴到新模块
  4. 删除旧的

很简单,但它起作用了。

最新更新