我正在尝试使用 VBA 将 SAP GUI 中的一行中的特定单元格中的数据获取到 Excel 表中。当我录制一个单击我需要的 5-6 个项目的宏时,它只显示我单击了一个。此外,我看不到任何从单元格获取数据到 SAP GUI 的方法。SAP GUI 代码在这里:
Dim W_Ret As Boolean
W_Ret = Attach_Session
If Not W_Ret Then
Exit Sub
End If
startrow = 10
On Error GoTo myerr
objSess.findById("wnd[0]").maximize
objSess.findById("wnd[0]/tbar[0]/okcd").Text = "/nymm_pricelist"
objSess.findById("wnd[0]").sendVKey 0
objSess.findById("wnd[0]/usr/ctxtS_MATNR-LOW").Text = Cells(currentline, 1).Value
objSess.findById("wnd[0]/usr/ctxtS_VKORG-LOW").Text = Cells(currentline, 4).Value
objSess.findById("wnd[0]/usr/ctxtS_VKORG-LOW").SetFocus
objSess.findById("wnd[0]/usr/ctxtS_VKORG-LOW").caretPosition = 4
objSess.findById("wnd[0]").sendVKey 8
Set myGrid = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell")
Cells(currentline, 5).Value = myGrid.GetCellValue(0, "MAKTX")
Cells(currentline, 6).Value = myGrid.GetCellValue(0, "GLOBALSALES_KBETR")
Cells(currentline, 7).Value = myGrid.GetCellValue(0, "GLOBALSALES_KONWA")
Cells(currentline, 8).Value = myGrid.GetCellValue(0, "GLOBALTRANSFER_KBETR")
Cells(currentline, 9).Value = myGrid.GetCellValue(0, "GLOBALTRANSFER_KONWA")
' Setting the line status to completed
Cells(currentline, 2).Value = 1
Exit Sub
myerr:
' Some error occured
' Setting the line status to Failed
Cells(currentline, 2).Value = 2
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!
小智 6
我解决此类问题如下。
首先,我录制一个帮助脚本。这样做时,网格的相关列被一个接一个地标记,并且例如按升序排序。以这种方式处理所有感兴趣的列后,您可以发现录制的脚本中的所有列名称。
帮助脚本应如下所示:
. . .
session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").currentCellColumn = "GLOBALTRANSFER_KONWA"
session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectColumn "GLOBALTRANSFER_KONWA"
session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").pressToolbarButton "&SORT_ASC"
正确的脚本如下:
. . .
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").text = "/nymm_pricelist"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtS_MATNR-LOW").text = Cells(currentline, 1).Value
session.findById("wnd[0]/usr/ctxtS_VKORG-LOW").text = Cells(currentline, 4).Value
session.findById("wnd[0]/usr/ctxtS_VKORG-LOW").setFocus
session.findById("wnd[0]/usr/ctxtS_VKORG-LOW").caretPosition = 4
session.findById("wnd[0]").sendVKey 8
set myGrid = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell")
'myPar_1 = myGrid.getcellvalue (0 , "X")
'myPar_2 = myGrid.getcellvalue (0 , "Y")
'myPar_3 = myGrid.getcellvalue (0 , "Z")
'myPar_4 = myGrid.getcellvalue (0 , "U")
'myPar_5 = myGrid.getcellvalue (0 , "V")
myPar_6 = myGrid.getcellvalue (0 , "GLOBALTRANSFER_KONWA")
对于字符串 X - V,将使用有效的列名称。
问候, 脚本人