0

我正在尝试从我的 excel 文件到 SAP 表中查找特定文本。

我试过下面的代码,但它给了我错误“无效的下一个控制变量引用”

到目前为止,下面是我的代码:

set rLastRow = rSheet.Cells(rSheet.rows.Count, "AO").End(xlUp).Row
Set Table = session.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell")

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


Dim columns As Object
Set columns = Table.ColumnOrder

For i = 0 To rows

For j = 2 To rLastRow


If rSheet.Cells(j, "AO").Value = Table.GetCellValue(i, columns(3)) Then

 MsgBox "Found!" & rSheet.Cells(j, "AO").Value & Table.GetCellValue(i, columns(3)), vbOKOnly

Else

'proceed to next value to find

End If

Next i

Next j

我要做的是对于excel中“AO”范围内的每个单元格,它将在我的GridView(SAP:fbl3n)中寻找匹配项。

有没有另一种方法可以从范围(excel)循环到每个单元格并在 SAP 表(GridView)中查找它?

4

2 回答 2

2

如果报告显示为网格,您可以尝试以下操作:

Sub Test()
'
' Test Makro
'
Set SapGuiAuto = GetObject("SAPGUI")
Set SAPApplication = SapGuiAuto.GetScriptingEngine
Set Connection = SAPApplication.Children(0)
Set session = Connection.Children(0)

rLastRow = ActiveCell.SpecialCells(xlLastCell).Row
Set Table = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell")

allRows = Table.RowCount - 1

Dim columns As Object
Set columns = Table.ColumnOrder

For i = 2 To rLastRow
'MsgBox Application.ActiveSheet.Cells(i, 41).Value
ActiveSheet.Cells(i, 41).Select

 For j = 0 To allRows
 'MsgBox Table.GetCellValue(j, columns(3))

  If ActiveSheet.Cells(i, 41).Value = Val(Table.GetCellValue(j, columns(3))) Then
   Table.setCurrentCell j, ""
   Table.selectedRows = j
   MsgBox "Found: " & ActiveSheet.Cells(i, 41).Value & " / " &   Table.GetCellValue(j, columns(3)), vbOKOnly
  End If

 Next
Next
'
End Sub

问候, ScriptMan

于 2018-02-20T10:43:27.823 回答
0

我不知道 SAP,但我会

  1. Set在 rLastRow 前面删除,因为rSheet.Cells(rSheet.rows.Count, "AO").End(xlUp).Row返回一个Long. 错误消息的原因可能在这里作为Set不能Object用于的自动声明For
  2. 利用Option Explicit
  3. 不使用rowsandcolumns作为变量名,RowsandColumns是 VBA 的关键字,可能会导致混淆
  4. 检查每次Set分配是否正常后的状态,例如:

    Set columns = Table.ColumnOrder
    If columns is Nothing Then <...escape from here...>
    
于 2018-02-15T12:08:42.177 回答