如何应对"Microsoft Excel is waiting for another application to complete an OLE action"

How to deal with "Microsoft Excel is waiting for another application to complete an OLE action"

当使用 excel 自动化其他 MS-Office 应用程序时,我经常收到仅确定提示 Microsoft Excel is waiting for another application to complete an OLE action.

只有在自动执行冗长的任务时才会出现这种情况。

我怎样才能以适当的方式处理这个问题?

两个最近的例子(我认为代码不太重要):

备注:

根据其他来源的建议,我确实将我的代码包装到 Application.DisplayAlerts = False 中。然而,这似乎是一个可怕的想法,因为实际上可能存在需要提醒我的情况。

我会在评论中添加@Tehscript 链接到的代码。

You can solve this by using the COM API to remove VBA's message filter. This will prevent COM from telling VBA to displaying a message box when it thinks the process you're calling has blocked. Note that if the process really has blocked for some reason this will prevent you from receiving any notification of that. [source]

我认为这是我在 2006 年用于解决相同问题的代码(有效)。

Private Declare Function _
    CoRegisterMessageFilter Lib "OLE32.DLL" _
    (ByVal lFilterIn As Long, _
    ByRef lPreviousFilter) As Long

Sub KillMessageFilter()  
    '''Original script Rob Bovey  

    '''https://groups.google.com/forum/?hl=en#!msg/microsoft.public.excel.programming/ct8NRT-o7rs/jawi42S8Ci0J
    '''http://www.appspro.com/

    Dim lMsgFilter As Long

    ''' Remove the message filter before calling Reflections.
    CoRegisterMessageFilter 0&, lMsgFilter

    ''' Call your code here....

    ''' Restore the message filter after calling Reflections.
    CoRegisterMessageFilter lMsgFilter, lMsgFilter

End Sub

我也尝试了 COM API 代码,它有效。但它仅在您看不到错误时才有用 - 每次触发错误时 30 秒的延迟仍然会发生,这对我来说是行不通的。

我所做的更好的更改是在虚拟云端硬盘(google 产品)中关闭“Microsoft Office 中的实时状态”。这已经(到目前为止!)为我解决了这个问题。我猜这和另一个 excel 插件之间存在某种冲突。