[英]SAP VBS & VBA - Using the RefNummber(Excel) - Copy the data from GridView(SAP) - Paste back to Excel?
我是VBA和SAP GUI脚本编写的新手。 我需要将代码实施到记录的VBScript中的帮助。
我有一个Excel工作表,其中使用“引用编号”将数据从TM03导入到Excel工作表中。 这部分工作正常。
编码:
Public Sub RunGUIScript(currentline As Integer)
Dim W_Ret As Boolean
W_Ret = Attach_Session
If Not W_Ret Then
Exit Sub
End If
On Error GoTo myerr
objSess.FindById("wnd[0]").maximize
objSess.FindById("wnd[0]/tbar[0]/okcd").Text = "/ntm03" 'TM03
objSess.FindById("wnd[0]").SendVKey 0
objSess.FindById("wnd[0]/usr/ctxtVTMFHA-BUKRS").Text = "0050" ' Company Code
objSess.FindById("wnd[0]/usr/ctxtVTMFHA-RFHA").Text = Cells(currentline, 1).Value ' Referenze Nummer
objSess.FindById("wnd[0]").SendVKey 0
Cells(currentline, 6).Value = objSess.FindById("wnd[0]/usr/tabsTS00/tabpBASE/ssubTS00_SUB:SAPLTM00:1203/ctxtVTMFHAZU-XVTRAB").Text ' Abschlussdatum
Cells(currentline, 9).Value = objSess.FindById("wnd[0]/usr/tabsTS00/tabpBASE/ssubTS00_SUB:SAPLTM00:1203/txtVTMFHA-KONTRH").Text ' Geschäftspartner
Cells(currentline, 11).Value = objSess.FindById("wnd[0]/usr/tabsTS00/tabpBASE/ssubTS00_SUB:SAPLTM00:1203/txtVTMHPTBWG-XZBETR").Text ' Zahlungsbetrag
Cells(currentline, 16).Value = objSess.FindById("wnd[0]/usr/tabsTS00/tabpBASE/ssubTS00_SUB:SAPLTM00:1203/subDATES:SAPLTM00:0011/ctxtVTMFHAZU-XBLFZ").Text 'Laufzeit Beginn
Cells(currentline, 17).Value = objSess.FindById("wnd[0]/usr/tabsTS00/tabpBASE/ssubTS00_SUB:SAPLTM00:1203/subDATES:SAPLTM00:0011/ctxtVTMFHAZU-XELFZ").Text 'Laufzeit Ende
Cells(currentline, 19).Value = objSess.FindById("wnd[0]/usr/tabsTS00/tabpBASE/ssubTS00_SUB:SAPLTM00:1203/txtVTMHPTBWG-XNWHR").Text ' Nominalbetrag
' 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
End Sub
Sub StartExtract()
Dim currentline As Integer
' This is the system to connect to
W_System = "Z2L100"
' We start looking for order numbers from line 8 in the sheet
currentline = 8
While Cells(currentline, 1).Value <> ""
' Only process this line if the status is "to be processed"
If Cells(currentline, 2).Value = 0 Then
' Run the actual GUI script
RunGUIScript currentline
End If
' move to the next line
currentline = currentline + 1
Wend
' Update the current date and time
Cells(2, 3).Value = Now()
objSess.EndTransaction
End Sub
如您所见,状态为已完成,如果没有更多的参考编号可供搜索,则停止。 没关系。
第二步是获取参考编号(这里我必须将ASTERIX连接到参考编号-示例[* 12345],并且“截止日期”将其粘贴到SAP搜索条件中,打开并从GridView中获取数据并将其粘贴回到工作表。
这里是SAP GUI脚本生成的代码:
objSess.FindById("wnd[0]/tbar[0]/okcd").Text = "/nse16"
objSess.FindById("wnd[0]").SendVKey 0
objSess.FindById("wnd[0]/usr/ctxtDATABROWSE-TABLENAME").Text = "VTBFHAZU"
objSess.FindById("wnd[0]").SendVKey 0
objSess.FindById("wnd[0]").SendVKey 17
objSess.FindById("wnd[1]/usr/txtENAME-LOW").Text = ""
objSess.FindById("wnd[1]/usr/txtENAME-LOW").SetFocus
objSess.FindById("wnd[1]/usr/txtENAME-LOW").caretPosition = 0
objSess.FindById("wnd[1]/tbar[0]/btn[8]").Press
objSess.FindById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").CurrentCellRow = 2
objSess.FindById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").SelectedRows = "2"
objSess.FindById("wnd[1]/tbar[0]/btn[2]").Press
objSess.FindById("wnd[0]/usr/ctxtI4-LOW").Text = "06.08.2018" ' CLOSING DATE
objSess.FindById("wnd[0]/usr/ctxtI4-LOW").SetFocus
objSess.FindById("wnd[0]/usr/ctxtI4-LOW").caretPosition = 10
objSess.FindById("wnd[0]").SendVKey 0
objSess.FindById("wnd[0]/usr/txtI14-LOW").Text = "*25750" ' ASTERIX (*) & REFERENZE NUMBER from Excel
objSess.FindById("wnd[0]/usr/txtI14-LOW").SetFocus
objSess.FindById("wnd[0]/usr/txtI14-LOW").caretPosition = 6
objSess.FindById("wnd[0]").SendVKey 0
objSess.FindById("wnd[0]").SendVKey 8
' Store The GridView As Local Object
Set GridView = objSess.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell")
' Extract The Column Titles
For i = 0 To GridView.ColumnCount - 1
Cells(9, i + 1).Value = GridView.GetColumnTitles(GridView.ColumnOrder(i))(0)
Next i
' Extract The Content
For i = 0 To GridView.ColumnCount - 1
For j = 0 To GridView.RowCount - 1
Cells(10 + j, i + 1).Value = GridView.GetCellValue(j, GridView.ColumnOrder(i))
Next j
Next i
这段代码提取了Header名称,即2行和63列。 实际上,我不需要所有数据。 从GridView我只需要:
第1列第3列第1列第37列,第2列第3列第2列第37列
粘贴回活动的Excel工作表行。 (见附图)
然后下一个参考数字。
Excel工作表:
对于具有编程技能的人来说,这应该并不复杂。 我希望有人能对此提供帮助。
我没有写上面的代码。 我使用了代码,并通过SAP GUI Recording实现了该代码,并将单元格引用为excel。 这里的目标是在一个vba模块中全部实现。
提前致谢 ! 由于这是我的第一篇文章,我希望您不要对我苛刻:)我会留在这里与有经验的人一起学习。 感谢您分享你的知识! 分享是关怀!
干杯。
大家好,感谢您的意见。
将GridView设置为Object之后,我使用了getCellValue函数。 对于行,您需要使用索引位置,对于列,您需要使用列名称以获取单元格值。
我用以下几行代码解决了这个问题:
Set GridView = objSess.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell") '-Store The GridView As Local Object
Cells(currentline, 10) = GridView.GetCellValue(0, "RFHA") '-Getting The Data From SAP GridView Into Excel
Cells(currentline, 12) = GridView.GetCellValue(0, "KKURS")
Cells(currentline, 20) = GridView.GetCellValue(1, "RFHA")
Cells(currentline, 22) = GridView.GetCellValue(1, "KKURS")
干杯。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.