簡體   English   中英

Excel VBA 中的 SAP GUI 腳本 - 錯誤 91(對象變量...)

[英]SAP GUI Scripting in Excel VBA - Error 91 (Object Variable...)

我正在嘗試通過 Excel VBA 連接到 SAP 以運行錄制的宏。

當它到達實際 SAP 代碼的開頭時,它會將

運行時錯誤“91”

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

如果我刪除該行,則每個會話行都會出現相同的問題。

我驗證了引用和聲明。

我將它作為 VBS 腳本運行,並且運行良好。

在運行代碼之前,我已登錄到 SAP 會話。

appl在本地 Windows 的值中不包含任何內容。 在類型上,它包含 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

你說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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM