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

问题描述 投票:0回答:3

我有一个 Excel 工作簿,其中包含很多内容 - 宏、外部和实时数据源等 - 上个月大约每周都会出现一次故障。

当运行宏并获得以下信息时,损坏通常会显现出来:

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

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

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

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

excel vba corruption
3个回答
1
投票

关于此错误有很多问题,并且修复这些问题的代码更改也没有任何意义。他们的共同点是他们对 VBA 代码进行了更改,推论,迫使 Excel 重新生成其伪代码。

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

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

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

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


0
投票

为我解决的问题是:

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

简单,但有效。


0
投票

多年来,我遇到了这个问题的多种形式,并创建了这个 GitHub 存储库来保存 VBA 代码,您可能会发现有助于恢复,更重要的是,避免这个问题。

祝大家好运!希望微软能找到这方面的线索,但我个人不抱希望。

© www.soinside.com 2019 - 2024. All rights reserved.