VBA 工作簿停止工作并升级到 Excel 365 - VBA 编译问题?

VBA Workbooks stop working with upgrade to Excel 365 - VBA Compiling Issue?

自升级到 Excel 365 后,我的公司一直遇到 VBA 支持的 Excel 工作簿崩溃或无法正常运行的各种问题。这些问题已经出现在各种工作簿和各个部门中,包括看似简单的 VBA 工作簿。我发现了一个修复方法(见下文),但它不可持续。

问题

下面列出了我们遇到的各种问题。请注意,这些问题仅在您在 Excel 365 桌面中打开文件时出现。相同的文件,在 Excel 365 浏览器应用程序或 Excel 2016 中打开时可以正常工作。此外,所有这些问题都是随机发生的。用户可能已经在文件中工作了数周,然后在他们下次打开文件时遇到了这些错误之一。

修复

打开 VBA 编辑器 window,然后 select 调试 -> 编译 VBA 项目似乎解决了这个问题。在以这种方式手动编译文件的情况下,我还没有遇到上述任何问题。这样做的问题是,每次向文件中添加代码或向文件中添加新选项卡时,都必须重新执行此手动编译。

是的,显然在文件中添加单个选项卡会改变工作簿结构,以至于有必要重新编译。 Compiled VBAProject selection 将变灰。但是添加一个选项卡(或添加新的 VBA)将使它取消灰色并需要另一个手动编译或问题再次开始出现。

此修复程序还可以修复出现上述问题的文件。要修复这些文件,您可以:

  1. 确保在您的安全设置中打开“禁用受信任的文档”和“禁用 VBA 宏并通知”,这样 VBA 不会在您打开时自动 运行一个文件。
  2. 打开有错误的文件但不启用VBA。
  3. 转到 VBA 编辑器 window,select 调试 -> 编译 VBA 项目。
  4. 保存文件,关闭它,重新打开它,启用 VBA,然后一切正常。

但同样,这是不可持续的,因为我的所有用户都必须记住在任何时候向工作簿添加新选项卡时进行编译VBA。

帮忙?

有没有人找到解决这个问题的更可持续的方法?微软正在开发的Excel365桌面自动编译器有没有bug?

我想我或许在这个帖子中找到了答案: https://social.msdn.microsoft.com/Forums/en-US/814ac2ce-ab45-45dc-8c6a-8ef0775d189a/excel-64bit-crashes-when-activating-macros-but-excel-32bit-does-not?forum=exceldev&prof=required

根据该线程 - “原因是 Excel 没有正确保存 VBA 代码的编译状态,64 位 Excel 在打开时无法从该问题中恢复afflicted Excel 文件(32 位通常可以)。仅针对 Excel 2016 而不是针对其他版本发布了修复程序。这确实证实了它是 Excel 中的错误并解释了为什么我们只看到 365 64 位 Excel.

这也解释了为什么我的手动编译修复有效。根据我发现的文章,有一个更可持续的修复方法。您可以更改 Excel 的注册表并强制 VBA 准确编译。

实施永久修复:

  1. 打开开始菜单并输入“reg”和select“注册表编辑器”
  2. 导航至:Computer\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office.0\Excel\options
  3. 在“编辑”菜单上,指向“新建”,然后单击“DWORD 值”。
  4. 键入 ForceVBALoadFromSource,然后按 Enter。
  5. 在详细信息窗格中,右键单击 ForceVBALoadFromSource,然后单击修改。
  6. 在“数值数据”框中,键入 1,然后单击“确定”。