Excel宏冻结Outlook

时间:2015-08-06 09:46:30

标签: excel-vba outlook ms-office bloomberg xlwings

我有这个相当繁重的宏进程,我希望在后台运行。一切都很好,除非它运行我的Outlook冻结(也许其他办公程序,但我没有尝试)。我知道这不是因为它耗尽了所有的CPU功率,因为​​a)我有一个强大的多核机器b)我所有的其他程序(甚至是重型程序)都运行得很好。看起来Outlook和Excel似乎正在分享Excel正在进行的某种过程。

这是一个已知问题吗?

我应该补充一点,我的宏没有与Outlook有关。至少不是故意的。它只是从彭博的数据中提取并使用数据进行一些计算。

4 个答案:

答案 0 :(得分:2)

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

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

DOEVENTS

指向您的代码,引用MSDN网站

  

DoEvents 将控制权传递给操作系统。控制权归还   操作系统完成处理后的事件   队列

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

答案 1 :(得分:1)

在将我的宏迁移到Office 2016时,同样的事情发生在我身上。解决方案:取消选中库" Microsoft Office 16.0对象库",默认情况下,在您创建新的vba模块时包含该库。 / p>

答案 2 :(得分:0)

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

你的宏有什么作用?请发布代码的相关摘要。

答案 3 :(得分:0)

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

但是-我不知道如何告诉Outlook在新实例中打开,因为它是运行的唯一Outlook实例。当我在Excel中运行代码时,有时Outlook会锁定,有时却不会(运行相同的代码)。我在关闭Outlook并打开备份以使其与要在其中运行长时间运行的宏的Excel实例“分离”时感到幸运。