Excel 等待OLE操作-自动“;点击";好啊

Excel 等待OLE操作-自动“;点击";好啊,excel,vba,Excel,Vba,有很多关于VBA的线程在等待OLE操作,但大多数线程似乎至少与我的略有不同,涉及最终的崩溃等 我正在使用Excel VBA和COM api对第三方应用程序进行一些测试(基本上是在数千个文件上循环,将命令传递给另一个应用程序,然后继续)。我间歇性地得到“等待OLE操作”,当它出现时,我所需要做的就是按下“OK”按钮,一切都会按预期恢复 我不认为抑制消息是我想要的,我认为这只会导致我的代码挂起,但是有没有一种方法可以在错误发生时模仿“单击确定”?或者我被困在保姆中了吗?您可以尝试添加Applicat

有很多关于VBA的线程在等待OLE操作,但大多数线程似乎至少与我的略有不同,涉及最终的崩溃等

我正在使用Excel VBA和COM api对第三方应用程序进行一些测试(基本上是在数千个文件上循环,将命令传递给另一个应用程序,然后继续)。我间歇性地得到“等待OLE操作”,当它出现时,我所需要做的就是按下“OK”按钮,一切都会按预期恢复


我不认为抑制消息是我想要的,我认为这只会导致我的代码挂起,但是有没有一种方法可以在错误发生时模仿“单击确定”?或者我被困在保姆中了吗?

您可以尝试添加
Application.DisplayAlerts=False

您可以尝试使用
Application.Wait
或WinAPI
Sleep
来减慢进程


您还可以尝试使用VBA
DoEvents
来确保操作系统正在处理其他事件。

可以使用COM API来删除VBA的消息过滤器。我第一次发现这个。然后,它已经在其他一些线程中使用。我将向您展示用于64位Office的API声明:

  • 将此代码复制到标准模块顶部(在声明区域中):
  • 复制同一模块中的下一个代码:

  • 但是您必须知道,如果该过程确实由于某种原因被阻止,这将阻止您收到任何有关该过程的通知。

    @Mykenk:您是否有时间测试上述建议?
    Private Declare PtrSafe Function CoRegisterMessageFilter Lib "OLE32.DLL" _
                  (ByVal lFilterIn As Long, ByRef lPreviousFilter) As LongPtr
    
    Sub KillMessageFilter()  'Original script Rob Bovey   
        '''https://groups.google.com/forum/?hl=en#!msg/microsoft.public.excel.programming/ct8NRT-o7rs/jawi42S8Ci0J
    
        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