Я новичок в VBA и SAP GUI Scirpting.Мне нужна помощь по внедрению кода в записанный 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
Этот код извлекает мне имя заголовка, дополнительные 2 строки с 63 столбцамиНа самом деле мне не нужны все данные. Из GridView мне ТОЛЬКО нужны:
строка 1 столбец 3 строка 1 столбец 37 и строка 2 столбец 3 строка 2 столбец 37
вставлены обратно встрока активного листа Excel (см. прилагаемое изображение)
Затем следующий номер ссылки.
Лист Excel:
Excel - куда следует импортировать данные/ вставлено из GridView
Это не должно быть сложно для тех, кто имеет навыки программирования. Я надеюсь, что кто-то мне поможет в этом.
Я не писал код выше.Я насредактировал код и реализовал его с помощью моего SAP GUI Recording и ссылки на ячейки в excel.Цель здесь - реализовать все в одном модуле vba.
Заранее спасибо!Так как это мой первый пост, я надеюсь, что вы не будете обижены на меня :) Я останусь здесь, чтобы учиться у опытных.Спасибо, что поделились своими знаниями!Делиться заботой!
Ура.