【问题标题】:Excel Macro freezes OutlookExcel 宏冻结 Outlook
【发布时间】:2023-03-31 19:44:01
【问题描述】:

我有这个相当重的 Excel 宏。运行时 Outlook 冻结。

我知道它没有使用所有 CPU 电源,因为
a) 我有一台功能强大的多核机器
b) 我所有的其他程序(甚至是重型程序)都运行良好。

看起来 Outlook 和 Excel 正在共享一个 Excel 占用的进程。

我的宏不执行任何与 Outlook 相关的操作,至少在知情的情况下不执行。它从 Bloomberg 中提取数据并进行一些计算。

【问题讨论】:

  • 让我补充一下,我使用 Bloomberg 插件以及 xlwings,所以如果这两个插件/库存在已知问题,那么它也会导致它。所以有人知道吗?

标签: excel vba outlook bloomberg xlwings


【解决方案1】:

我很感激这匹马已经离开了畜栏……但是,我也经历过这种情况,并且我的代码中没有对 Outlook 模型的引用。我还注意到我的 Excel 锁定,而另一个 Excel 实例中的宏正在运行。

要解决此问题,您需要添加一个

DOEVENTS

到您的代码行,引用 MSDN 网站

DoEvents 将控制权交给操作系统。控制权归还 在操作系统完成处理其中的事件之后 排队

DOEVENTS 行的放置位置很大程度上取决于您的代码,但在我的一个相当繁重的宏中,我进行了许多 SQL 调用,我将它放置在每个看起来运行良好的 SQL 调用之前。允许我在一个 Excel 实例中非常愉快地工作,而后台实例执行许多 SQL 提取。

【讨论】:

    【解决方案2】:

    在将宏迁移到 Office 2016 时,我也发生了同样的事情。解决方案:取消选中库“Microsoft Office 16.0 Object Library”,创建新的 vba 模块时默认包含该库。

    【讨论】:

      【解决方案3】:

      请记住,对 Outlook 对象模型的所有调用都被编组到 Outlook 的主线程,因此如果您的 Excel 宏正在使用 Outlook 对象模型,Outlook 可以并且将会变得无响应。

      扩展 MAPI(C++ 或 Delphi)可用于多线程环境。

      你的宏是做什么的?请发布您的代码的相关sn-p。

      【讨论】:

      • 我对我的问题进行了澄清,据我所知,我的宏根本没有触及前景。
      【解决方案4】:

      我也有同样的问题。当我在工作簿中运行代码时,我通过在新实例中打开它们来避免锁定其他 Excel 工作簿。请注意,默认情况下 Excel 现在会在同一实例中打开所有工作簿。对于我有 VBA 的工作簿和大型工作簿 - 我总是尝试在新实例中打开,以避免冻结和混淆 VBA 应该在哪里运行。我在打开 Excel 时按住 ALT 键(如果另一个实例已打开)并验证我是否要打开一个新实例。这也适用于其他应用程序。

      但是 - 我不知道如何告诉 Outlook 在新实例中打开,因为它是 Outlook 运行的唯一实例。有时,当我在 Excel 中运行代码时 Outlook 会锁定,有时则不会(运行相同的代码)。我在关闭 Outlook 并重新打开它以使其与我想在其中运行长时间运行的宏的 Excel 实例“分离”时获得了一些运气。

      【讨论】:

      • 这无助于解决问题
      • 我只能报告说,当我运行 Excel VBA(运行很长时间)时,它似乎对我的 Outlook 冻结问题有效。就在今天,我打开了三个 Excel 实例和 Outlook。我在我的一个 Excel 实例中运行了一些代码(运行时间超过 10 分钟)。我去了Outlook,它被锁定了。然后我去了我的任务管理器并杀死了 Outlook 进程。重新打开 Outlook(Excel 宏仍在运行)后,我可以使用 Outlook。
      猜你喜欢
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      • 2017-12-15
      • 2023-03-30
      • 2015-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多