如何跳过等待OLE操作SAP

时间:2018-05-02 19:22:48

标签: excel vba excel-vba sap

我是SAP脚本的新手,但已经有了一些VBA经验。 我有以下问题试图在SAP中为我当前的位置自动化一个过程。 所以我正在录制一系列程序,将代码粘贴在宏表中,并使Excell使用以下命令读取VBS代码:

Dim SapGuiAuto As Object
Dim Application As Object
Dim Connection As Object
Dim Session As Object

Set SapGuiAuto = GetObject("SAPGUI")
Set Application = SapGuiAuto.GetScriptingEngine
Set Connection = Application.Children(0)
Set Session = Connection.Children(0)

所以一切都很好,但对于其中一个部分,SAP进行了大量的计算,需要花费几分钟时间,并且在其中间,Excel生成消息: enter image description here

所以我必须单击OK才能继续,这很烦人,因为它会不停地弹出,我必须像10-15次一样才能达到目标,这就消除了自动化点。如果没有宏,SAP不会给我任何错误。 我尝试用

关闭它

Application.DisplayAlerts = False,但它不起作用,而是给了我: enter image description here

我搜索了网络和网站,但几乎没有任何有用的信息,因为我的问题是具体的。 一些额外的信息: 1.我的笔记本电脑不能正常工作,我无法在未经许可的情况下安装任何其他软件或更新,如果您考虑到这一点,请给我替代解决方案。

  1. 我尝试检查DDE的Excel选项,但是当我尝试运行脚本时它只会给我一个错误。 enter image description here
  2. 我的Excel版本是2013。 所以,任何人都可以帮助我实现我能想到的三种解决方案之一: 1.禁用弹出窗口

    1. 每次出现时都会自动点击“确定”

    2. 让Excel冻结并等待SAP做它的事情? (不知道这是否有意义。) - BTW,尝试使用Application.Wait,但没有成功

    3. 提前谢谢大家,我希望有人可以帮助我! 问候, 米哈伊尔

3 个答案:

答案 0 :(得分:0)

上面的Storax实际上通过问题的解决方案给出了另一个主题的链接。

代码在这里:

私人声明功能_     CoRegisterMessageFilter Lib" OLE32.DLL" _     (ByVal lFilterIn As Long,_     ByRef lPreviousFilter)As Long

Sub KillMessageFilter()
    '''原始剧本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

答案 1 :(得分:0)

如果使用64位Microsoft Office,则应根据Declare Statement略微更改M_Delineshev提供的代码。尝试使用此版本:

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 '''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

答案 2 :(得分:0)

以下代码对我有用...

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

Sub IgnoreMessages()

Dim lMsgFilter As Long

CoRegisterMessageFilter 0&, lMsgFilter

'Write your code here

CoRegisterMessageFilter lMsgFilter, lMsgFilter

End Sub