VBA& SAP脚本:循环访问SAP表

时间:2018-02-13 06:30:32

标签: vba excel-vba sap sap-gui sapscript

我目前正在创建一个自动化系统,其中将在SAP表中搜索来自excel的数据。

我尝试记录SAP中的步骤,但它只给了我这个:

session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/lbl[18,15]").setFocus
session.findById("wnd[0]/usr/lbl[18,15]").caretPosition = 10

我知道它告诉我当前的单元格地址。

当我尝试检查表名(F1)时,它给出了“RFPOSXEXT”的名称。

enter image description here

我是sap脚本的新手,我不知道如何继续搜索SAP表中需要的值。

我的问题是,我如何设置表并循环遍历表格行,直到找到我要查找的文字?

我相信它也只允许我搜索可见的行。

以下是我在SAP中的表格。我将循环到分配,文档编号和数量的行,如果它将与excel中的“textToFind”匹配,那么我将能够编辑匹配的每个项目的文本。

enter image description here

1 个答案:

答案 0 :(得分:2)

假设您在ALV网格中显示数据,并且在帖子中写入时已准备好会话。然后,以下代码将SAP中的数据复制到excel中。您必须根据需要调整代码

    Dim wks As Worksheet
    Set wks = " your worksheet here ..."

    Dim Table As Object
    Dim cols As Long
    Dim rows As Long
    Dim i As Long, j As Long

    Set Table = Session.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell")

    rows = Table.RowCount - 1
    cols = Table.ColumnCount - 1

    Dim columns As Object
    Set columns = Table.ColumnOrder


    Dim arrCol() As Variant
    ReDim arrCol(cols)
    For j = 0 To cols
        arrCol(j) = (CStr(columns(j)))
    Next
    With wks
        .Range(.Cells(1, 1), .Cells(1, cols + 1)).Value = arrCol()
    End With

    For i = 0 To rows
        For j = 0 To cols
            arrCol(j) = Table.GetCellValue(i, CStr(columns(j)))                
        Next

        With wks
            .Range(.Cells(i + 2, 1), .Cells(i + 2, cols + 1)).Value = arrCol()
        End With

        If i Mod 10 = 0 Then
            Table.SetCurrentCell i, CStr(columns(0))
            DoEvents
        End If
    Next

End Sub

如果您不使用griv视图控件,上面的代码将失败。 “会话”必须是有效的SAP Guisession,指向FBL3N并打开网格视图。在我上面提供的链接中,你会看到很热的事情。