【问题标题】:SAP GUI Scripting in Excel VBA - Error 91 (Object Variable...)Excel VBA 中的 SAP GUI 脚本 - 错误 91(对象变量...)
【发布时间】:2020-01-27 19:18:10
【问题描述】:

我正在尝试通过 Excel VBA 连接到 SAP 以运行录制的宏。

当它到达实际 SAP 代码的开头时,它会放置

运行时错误“91”

上线session.FindById("wnd[0]").Maximize。

如果我删除该行,它与每个会话行都有相同的问题。

我验证了引用和声明。

我将它作为 VBS 脚本运行,它运行良好。

在运行代码之前,我已登录到 SAP 会话。

appl 在本地窗口的值中不包含任何内容。在类型上它包含 GuiApplication。

以下是代码片段:

Private Sub CommandButton1_Click()
    Dim Tablename As String

    If TextBox1 = "" Then
        If Not IsObject(appl) Then
           Set SapGuiAuto = GetObject("SAPGUI")
           Set appl = SapGuiAuto.GetScriptingEngine
        End If
        If Not IsObject(Connection) Then
           Set Connection = appl.Children(0)
        End If
        If Not IsObject(session) Then
           Set session = Connection.Children(0)
        End If
        If IsObject(WScript) Then
           WScript.ConnectObject session, "on"
           WScript.ConnectObject Application, "on"
        End If

        session.FindById("wnd[0]").Maximize
        session.FindById("wnd[0]/tbar[0]/okcd").Text = "Stock01"
        session.FindById("wnd[0]/tbar[0]/btn[0]").press
        session.FindById("wnd[0]/usr/ctxtS_MATNR-LOW").Text = "566666"
        session.FindById("wnd[0]/usr/ctxtS_MATNR-HIGH").Text = "5666666"
        session.FindById("wnd[0]/usr/ctxtS_WERKS-LOW").Text = "1111"
        session.FindById("wnd[0]/usr/ctxtS_WERKS-HIGH").Text = "1045"
        session.FindById("wnd[0]/usr/ctxtS_WERKS-HIGH").SetFocus
        session.FindById("wnd[0]/usr/ctxtS_WERKS-HIGH").caretPosition = 4
        session.FindById("wnd[0]/tbar[1]/btn[8]").press
        session.FindById("wnd[0]/usr/cntlYCONTAINER/shellcont/shell").pressToolbarContextButton "&MB_EXPORT"
        session.FindById("wnd[0]/usr/cntlYCONTAINER/shellcont/shell").selectContextMenuItem "&XXL"
        session.FindById("wnd[1]/tbar[0]/btn[0]").press
        session.FindById("wnd[1]/usr/ctxtDY_PATH").Text = "C:\Documents\SAP_GUI_Code"
        session.FindById("wnd[1]/usr/ctxtDY_FILENAME").Text = "Stock.XLSX"
        session.FindById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 11
        session.FindById("wnd[1]/tbar[0]/btn[11]").press
        session.FindById("wnd[0]/tbar[0]/btn[3]").press
        session.FindById("wnd[0]/tbar[0]/btn[3]").press

        exit Sub

【问题讨论】:

标签: excel vba sap-gui


【解决方案1】:

你说appl 不包含任何内容。所以session也包含Nothing是正常的,所以使用变量时会报错91。

正如@GSerg 在对话中所说:

那是因为 IsObject 确定变量是否具有对象类型,而不是它是否包含对象的实例。特别是,IsObject(Nothing) 为 True。您想用 Is Nothing 测试替换所有 IsObject 调用。

因此,第一行应该是:

        If appl Is Nothing Then
           Set SapGuiAuto = GetObject("SAPGUI")
           Set appl = SapGuiAuto.GetScriptingEngine
        End If
        If Connection Is Nothing Then
           Set Connection = appl.Children(0)
        End If
        If session Is Nothing Then
           Set session = Connection.Children(0)
        End If

【讨论】:

    猜你喜欢
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多