【问题标题】:VBA Workbooks stop working with upgrade to Excel 365 - VBA Compiling Issue?VBA 工作簿停止使用升级到 Excel 365 - VBA 编译问题?
【发布时间】:2021-09-01 17:07:18
【问题描述】:

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

问题

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

  • “找不到项目或库”错误,即使我们使用标准库和基本 VBA 集也是如此。然后,当您打开 VBA 编辑器窗口时,所有 VBA 屏幕基本上都被冻结了,无法访问库列表。
  • Excel 在打开这些文件并启用 VBA 时硬崩溃或锁定。请注意,崩溃仅在启用 VBA 时发生。如果您在未启用 VBA 的情况下打开文件,它会正常工作(但显然您不能使用任何代码)。
  • 文件打开时看似正常,但 VBA 无法正常工作,当您访问 VBA 编辑器窗口时,一切都再次被锁定。
  • “出现未处理的 win32 异常”错误
  • 执行命令时,出现错误 32809,这似乎表明编译的 VBA 已损坏

修复

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

是的,显然在文件中添加单个选项卡会改变工作簿结构,以至于需要再次编译。 Compiled VBAProject 选项将显示为灰色。但是添加一个选项卡(或添加新的 VBA)会使它变灰,需要再次手动编译,否则问题会再次出现。

此修复也适用于修复出现上述问题的文件。要修复这些文件,您可以:

  1. 确保在您的安全设置中启用“禁用受信任的文档”和“禁用带有通知的 VBA 宏”,以便在您打开文件时 VBA 不会自动运行。
  2. 打开出现错误的文件,但不要启用 VBA。
  3. 进入 VBA Editor 窗口,选择 Debug -> Compile VBAProject。
  4. 保存文件,关闭它,重新打开它,启用 VBA,然后一切正常。

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

帮助?

有没有人找到更可持续的解决方案来解决这个问题? Microsoft 正在开发的 Excel 365 Desktop 自动编译器是否存在错误?

【问题讨论】:

  • 这些文件在哪里?它们在 SharePoint\Teams\OneDrive 中吗?在服务器上?还是 PC 本地?
  • 一般情况下它们在我们公司的共享文件服务器上。但是我们在保存到本地驱动器的文件时遇到了同样的问题。
  • 我已经使用 Excel 365 多年了。它与 Excel 2016/2019 或任何最新版本没有什么不同。还有其他事情正在发生。您是否使用任何附加组件或第 3 方扩展程序?
  • 文件是什么文件格式?老.xls?还是新的.xlsb
  • 文件都是.xlsm,使用宏。

标签: excel vba excel-365


【解决方案1】:

我想我可能在这个帖子中找到了答案: 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 在打开受影响的 Excel 文件时无法从该问题中恢复(32 位通常可以)。仅针对 Excel 2016 而不是其他版本发布了修复”。这确实可以确认这是 Excel 中的一个错误,并解释了为什么我们只看到 365 64 位 Excel 的问题。

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

实施永久修复:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多