我目前正在创建一个自动化系统,其中将在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”的名称。
我是sap脚本的新手,我不知道如何继续搜索SAP表中需要的值。
我的问题是,我如何设置表并循环遍历表格行,直到找到我要查找的文字?
我相信它也只允许我搜索可见的行。
以下是我在SAP中的表格。我将循环到分配,文档编号和数量的行,如果它将与excel中的“textToFind”匹配,那么我将能够编辑匹配的每个项目的文本。
答案 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并打开网格视图。在我上面提供的链接中,你会看到很热的事情。