简体   繁体   English

调用 SAP RFC_READ_TABLE 时出现错误索引

[英]Bad Index when calling SAP RFC_READ_TABLE

I keep getting bad index error for below code..我不断收到以下代码的错误索引错误..

Sub GetDocumentedGoodsMovement()

    Dim funcs As SAPFunctions
    Dim ws As Worksheet        
    
    Set ws = ThisWorkbook.Worksheets("Sheet3")
    
    Set sapConn = CreateSapFunctions()
    If sapConn Is Nothing Then
        Exit Sub
    End If
    
    Set objRfcFunc = sapConn.Add("RFC_READ_TABLE")
    Set objQueryTab = objRfcFunc.Exports("QUERY_TABLE")
    Set objDelimiter = objRfcFunc.Exports("DELIMITER")
    Set objRowCount = objRfcFunc.Exports("ROWCOUNT")
    
    objRowCount.Value = "99999999"
    
    Set objOptTab = objRfcFunc.Tables("OPTIONS")
    Set objFldTab = objRfcFunc.Tables("FIELDS")
    Set objDatTab = objRfcFunc.Tables("DATA")
    
    objQueryTab.Value = "AUFM"  'TABLE
    objDelimiter.Value = "|"    'DELIMITER
    
    
    objOptTab(objOptTab.RowCount, "TEXT") = "AUFNR EQ '000009999999"' AND BWART EQ '261'"  'FILTERS FOR VIEW.
    objFldTab.FreeTable
    

    objFldTab.AppendRow
    objFldTab(objFldTab.RowCount, "FIELDNAME") = "AUFNR"    'FIELD TO DISPLAY
    objFldTab.AppendRow
    objFldTab(objFldTab.RowCount, "FIELDNAME") = "MBLNR"    'FIELD TO DISPLAY
    objFldTab.AppendRow
    objFldTab(objFldTab.RowCount, "FIELDNAME") = "MATNR"    'FIELD TO DISPLAY
    objFldTab.AppendRow
    objFldTab(objFldTab.RowCount, "FIELDNAME") = "LGORT"    'FIELD TO DISPLAY
    objFldTab.RAppendRow
    objFldTab(objFldTab.RowCount, "FIELDNAME") = "BWART"    'FIELD TO DISPLAY
    objFldTab.AppendRow
    objFldTab(objFldTab.RowCount, "FIELDNAME") = "SHKZG"    'FIELD TO DISPLAY
    

    
    If objRfcFunc.Call = False Then
        MsgBox objRfcFunc.Exception
    End If
    
    Dim objDatRec As Object
    Dim objFldRec As Object
    
    For Each objDatRec In objDatTab.Rows
        For Each objFldRec In objFldTab.Rows
            ws.Cells(objDatRec.Index + 1, objFldRec.Index) = Mid(objDatRec("WA"), objFldRec("OFFSET") + 1, objFldRec("LENGTH"))
        Next
    Next


End Sub

Error occurs at line:错误发生在以下行:

objOptTab(objOptTab.RowCount, "TEXT") = "AUFNR EQ '000009999999"' AND BWART EQ '261'"

The error are as follows:错误如下:

"Run-time error '-2147352565 (8002000b)':
Bad index

Are there any pointers as to why this error occurs?是否有任何关于为什么会发生此错误的指示? The following breakdowns are already done to try to locate the source of the error (without any luck so far):已经进行了以下细分以尝试定位错误的根源(到目前为止没有任何运气):

  1. I have the required auth.我有所需的身份验证。 to call RFC_READ_TABLE.调用 RFC_READ_TABLE。
  2. The value '000009999999' is correct, and exists in table AUFM.值 '000009999999' 是正确的,并且存在于表 AUFM 中。
  3. There are entries for the given order number, with Movement type (BWART) 261.有给定订单号的条目,运动类型 (BWART) 261。
  4. The SAP Logon works as it should, without any errors. SAP Logon 正常工作,没有任何错误。
  5. I've tested the exact same entries in SE37.我在 SE37 中测试了完全相同的条目。 It gives me the result I'm after.它给了我想要的结果。

To answer my own question, the error occured due to missing row in objOptTab .为了回答我自己的问题,由于objOptTab中缺少行而发生错误。 To fix the error, I added this row:为了修复错误,我添加了这一行:

objOptTab.AppendRow

Complete, working code:完整的工作代码:

Sub GetDocumentedGoodsMovement()

    Dim funcs As SAPFunctions
    Dim ws As Worksheet        
    
    Set ws = ThisWorkbook.Worksheets("Sheet3")
    
    Set sapConn = CreateSapFunctions()
    If sapConn Is Nothing Then
        Exit Sub
    End If
    
    Set objRfcFunc = sapConn.Add("RFC_READ_TABLE")
    Set objQueryTab = objRfcFunc.Exports("QUERY_TABLE")
    Set objDelimiter = objRfcFunc.Exports("DELIMITER")
    Set objRowCount = objRfcFunc.Exports("ROWCOUNT")
    
    objRowCount.Value = "99999999"
    
    Set objOptTab = objRfcFunc.Tables("OPTIONS")
    Set objFldTab = objRfcFunc.Tables("FIELDS")
    Set objDatTab = objRfcFunc.Tables("DATA")
    
    objQueryTab.Value = "AUFM"  'TABLE
    objDelimiter.Value = "|"    'DELIMITER
    
    objOptTab.AppendRow
    objOptTab(objOptTab.RowCount, "TEXT") = "AUFNR EQ '000009999999' AND BWART EQ '261'"  'FILTERS FOR VIEW.
    objFldTab.FreeTable
    

    objFldTab.AppendRow
    objFldTab(objFldTab.RowCount, "FIELDNAME") = "AUFNR"    'FIELD TO DISPLAY
    objFldTab.AppendRow
    objFldTab(objFldTab.RowCount, "FIELDNAME") = "MBLNR"    'FIELD TO DISPLAY
    objFldTab.AppendRow
    objFldTab(objFldTab.RowCount, "FIELDNAME") = "MATNR"    'FIELD TO DISPLAY
    objFldTab.AppendRow
    objFldTab(objFldTab.RowCount, "FIELDNAME") = "LGORT"    'FIELD TO DISPLAY
    objFldTab.RAppendRow
    objFldTab(objFldTab.RowCount, "FIELDNAME") = "BWART"    'FIELD TO DISPLAY
    objFldTab.AppendRow
    objFldTab(objFldTab.RowCount, "FIELDNAME") = "SHKZG"    'FIELD TO DISPLAY
    

    
    If objRfcFunc.Call = False Then
        MsgBox objRfcFunc.Exception
    End If
    
    Dim objDatRec As Object
    Dim objFldRec As Object
    
    For Each objDatRec In objDatTab.Rows
        For Each objFldRec In objFldTab.Rows
            ws.Cells(objDatRec.Index + 1, objFldRec.Index) = Mid(objDatRec("WA"), objFldRec("OFFSET") + 1, objFldRec("LENGTH"))
        Next
    Next


End Sub

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM