Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 调用SAP RFC_READ_表时索引错误_Vba_Runtime Error_Abap_Saprfc - Fatal编程技术网

Vba 调用SAP RFC_READ_表时索引错误

Vba 调用SAP RFC_READ_表时索引错误,vba,runtime-error,abap,saprfc,Vba,Runtime Error,Abap,Saprfc,我不断得到以下代码的错误索引 Sub GetDocumentedGoodsMovement() Dim funcs As SAPFunctions Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sheet3") Set sapConn = CreateSapFunctions() If sapConn Is Nothing Then

我不断得到以下代码的错误索引

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
第行出现错误:

objOptTab(objOptTab.RowCount, "TEXT") = "AUFNR EQ '000009999999"' AND BWART EQ '261'"
"Run-time error '-2147352565 (8002000b)':
Bad index
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
错误如下:

objOptTab(objOptTab.RowCount, "TEXT") = "AUFNR EQ '000009999999"' AND BWART EQ '261'"
"Run-time error '-2147352565 (8002000b)':
Bad index
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
是否有任何关于此错误发生原因的指示?已经进行了以下细分,以尝试定位错误源(到目前为止没有任何运气):

  • 我有必要的授权。调用RFC_READ_表
  • 值“00000999999”正确,并且存在于表AUFM中
  • 有给定订单号的条目,移动类型(BWART)261
  • SAP登录正常工作,没有任何错误
  • 我在SE37中测试了完全相同的条目。它给了我想要的结果

  • 为了回答我自己的问题,出现错误的原因是
    objOptTab
    中缺少行。 为了修复错误,我添加了此行:

    objOptTab.AppendRow
    
    完成,工作代码:

    objOptTab(objOptTab.RowCount, "TEXT") = "AUFNR EQ '000009999999"' AND BWART EQ '261'"
    
    "Run-time error '-2147352565 (8002000b)':
    Bad index
    
    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
    

    “00000999999”=>这看起来像是一个打字错误(为了清楚起见,我在其中加了空格),“必须替换”和“必须替换吗?你完全正确。。但是,更改为“AUFNR EQ'00000999999'和BWART EQ'261'”后,错误仍然相同..:/