17.05.2023, 14:36
Hallo Zusammen,
Ich betrete gerade absolutes Neuland für mich.
SAP-Gui Sripting. Damit kann man in SAP ein Script aufzeichnen und diesen in EXCEL/VBA ändern. Als Ergebenis kann man seine Daten über eine Exceltabelle automatisch in SAP einlesen lassen und muss dass dann nicht mehr seine Daten nacheinander per Hand in SAP eingegen. Das VBA-Makro spiehlt dann die Daten von Excel in SAP ein. Geht schneller.
So weit die Theorie.
Beschäftige mich gerade damit und habe leider keine Vorkenntnisse in VBA. Ich möchte im Moment eine Exceltabelle (eine Spalte mit Überschrift) mit ca. 100 Zeilen in einer SAP-Tabelle mit 8 sichtbaren Zeilen per GuiScripting einlesen.
Der Trick ist dass man 8 Zeilen in der SAP-Tabelle mit den ersten 8 Excelwerte einliest, die SAP-Tabelle nach unten scrollt, dann die nächsten 8 Excelwerte einliest, dann in SAP nach unten scrollt, die nächsten 8 Excelwerte einliest usw. bis alle 100 Excelwerte eingelesen sind. Das geshieht mit einer Schleife. Ich habe dazu auf Youtube ein Video gefunden, dass sich mit meinen Problem beschäftigt. Ich habe es nachgebaut. Leider funktioniert es nicht richtig.
Kann sich bitte Jemand der sich mit VBA auskennt den VBA-Code/die Schleife anschauen und mir bitte sagen wo der Fehler ist?
--> Das Fehlerbild habe ich als Anhang dieses Beitrages angefügt.
anbei mein Script:
Sub Z_PS_ABR2()
Dim shtZ_PS_ABR2 As Worksheet
Dim objTable As Object
Dim intRwVisible As Integer
Dim intScrollbar As Integer
Dim i, x, z As Long
' i = Anzahl Excelzeilen
' x = Aktuelle Positon in Excel-Tabelle
' Z = Aktuelle Positon in SAP-Tabelle
Set shtZ_PS_ABR2 = ThisWorkbook.Sheets("Z_PS_ABR2")
Dim SapGuiAuto, Application, Connection, session As Object
Set SapGuiAuto = GetObject("SAPGUI")
Set Application = SapGuiAuto.GetScriptingEngine
Set Connection = Application.Children(0)
Set session = Connection.Children(0)
'Teil 1 Uni-------------------------------------------------------------------------------------------------------
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nZps_ABR2" 'Variable Name Transaktion
session.findById("wnd[0]").sendVKey 0
'2.Selektion Eingabe-------------------------------------------------------------------------------------
session.findById("wnd[0]/usr/btn%_SP$00007_%_APP_%-VALU_PUSH").press '00007 = 7. Knopf Dateneingabe
i = shtZ_PS_ABR2.Range("G1048576").End(xlUp).Row 'Letzte Zeile der der Spalte G/7. Spalte
z = 0
Set objTable = session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE")
intRwVisible = objTable.visibleRowCount ' gibt die Anzahl der sichtbaren Zeilen in der Tabelle zurück.
For x = 2 To i
Voltar2: 'Anfang Schleife2
If z = intRwVisible Then
intScrollbar = intScrollbar + intRwVisible
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE").verticalScrollbar.Position = intScrollbar
z = 0
GoTo Voltar2 'Ende Schleife2
Else
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL-SLOW_I[1," & z & "]").Text = shtZ_PS_ABR2.Cells(x, 7).Value ' 7 = 7. Spalte
z = z + 1
End If
Next
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL-SLOW_I[1,1]").SetFocus
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL-SLOW_I[1,1]").caretPosition = 0
session.findById("wnd[1]/tbar[0]/btn[8]").press
'Teil 2 Uni-------------------------------------------------------------------------------------------------------
session.findById("wnd[0]/usr/rad%DOWN").SetFocus
session.findById("wnd[0]/usr/rad%DOWN").Select
session.findById("wnd[0]/usr/txt%PATH").Text = "C:\Users\Warnecke\OneDrive - AUNDE GROUP\Gui Scripting_CSV\Quelle_Download"
session.findById("wnd[0]/usr/txt%PATH").SetFocus
session.findById("wnd[0]/usr/txt%PATH").caretPosition = 74
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[1]/usr/chkRSAQDOWN-COLUMN").Selected = True
session.findById("wnd[1]/usr/ctxtRLGRAP-FILENAME").Text = "C:\Users\Warnecke\OneDrive - AUNDE GROUP\Gui Scripting_CSV\Quelle_Download\V1"
session.findById("wnd[1]/usr/chkRSAQDOWN-COLUMN").SetFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
shtZ_PS_ABR2.Cells(1, 18).Value = session.findById("wnd[0]/sbar").Text
session.findById("wnd[0]/tbar[0]/btn[3]").press
Set shtZ_PS_ABR2 = Nothing
Set objTable = Nothing
End Sub
Mit freundlichen Grüßen Markus.W
Ich betrete gerade absolutes Neuland für mich.
SAP-Gui Sripting. Damit kann man in SAP ein Script aufzeichnen und diesen in EXCEL/VBA ändern. Als Ergebenis kann man seine Daten über eine Exceltabelle automatisch in SAP einlesen lassen und muss dass dann nicht mehr seine Daten nacheinander per Hand in SAP eingegen. Das VBA-Makro spiehlt dann die Daten von Excel in SAP ein. Geht schneller.
So weit die Theorie.
Beschäftige mich gerade damit und habe leider keine Vorkenntnisse in VBA. Ich möchte im Moment eine Exceltabelle (eine Spalte mit Überschrift) mit ca. 100 Zeilen in einer SAP-Tabelle mit 8 sichtbaren Zeilen per GuiScripting einlesen.
Der Trick ist dass man 8 Zeilen in der SAP-Tabelle mit den ersten 8 Excelwerte einliest, die SAP-Tabelle nach unten scrollt, dann die nächsten 8 Excelwerte einliest, dann in SAP nach unten scrollt, die nächsten 8 Excelwerte einliest usw. bis alle 100 Excelwerte eingelesen sind. Das geshieht mit einer Schleife. Ich habe dazu auf Youtube ein Video gefunden, dass sich mit meinen Problem beschäftigt. Ich habe es nachgebaut. Leider funktioniert es nicht richtig.
Kann sich bitte Jemand der sich mit VBA auskennt den VBA-Code/die Schleife anschauen und mir bitte sagen wo der Fehler ist?
--> Das Fehlerbild habe ich als Anhang dieses Beitrages angefügt.
anbei mein Script:
Sub Z_PS_ABR2()
Dim shtZ_PS_ABR2 As Worksheet
Dim objTable As Object
Dim intRwVisible As Integer
Dim intScrollbar As Integer
Dim i, x, z As Long
' i = Anzahl Excelzeilen
' x = Aktuelle Positon in Excel-Tabelle
' Z = Aktuelle Positon in SAP-Tabelle
Set shtZ_PS_ABR2 = ThisWorkbook.Sheets("Z_PS_ABR2")
Dim SapGuiAuto, Application, Connection, session As Object
Set SapGuiAuto = GetObject("SAPGUI")
Set Application = SapGuiAuto.GetScriptingEngine
Set Connection = Application.Children(0)
Set session = Connection.Children(0)
'Teil 1 Uni-------------------------------------------------------------------------------------------------------
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nZps_ABR2" 'Variable Name Transaktion
session.findById("wnd[0]").sendVKey 0
'2.Selektion Eingabe-------------------------------------------------------------------------------------
session.findById("wnd[0]/usr/btn%_SP$00007_%_APP_%-VALU_PUSH").press '00007 = 7. Knopf Dateneingabe
i = shtZ_PS_ABR2.Range("G1048576").End(xlUp).Row 'Letzte Zeile der der Spalte G/7. Spalte
z = 0
Set objTable = session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE")
intRwVisible = objTable.visibleRowCount ' gibt die Anzahl der sichtbaren Zeilen in der Tabelle zurück.
For x = 2 To i
Voltar2: 'Anfang Schleife2
If z = intRwVisible Then
intScrollbar = intScrollbar + intRwVisible
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE").verticalScrollbar.Position = intScrollbar
z = 0
GoTo Voltar2 'Ende Schleife2
Else
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL-SLOW_I[1," & z & "]").Text = shtZ_PS_ABR2.Cells(x, 7).Value ' 7 = 7. Spalte
z = z + 1
End If
Next
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL-SLOW_I[1,1]").SetFocus
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL-SLOW_I[1,1]").caretPosition = 0
session.findById("wnd[1]/tbar[0]/btn[8]").press
'Teil 2 Uni-------------------------------------------------------------------------------------------------------
session.findById("wnd[0]/usr/rad%DOWN").SetFocus
session.findById("wnd[0]/usr/rad%DOWN").Select
session.findById("wnd[0]/usr/txt%PATH").Text = "C:\Users\Warnecke\OneDrive - AUNDE GROUP\Gui Scripting_CSV\Quelle_Download"
session.findById("wnd[0]/usr/txt%PATH").SetFocus
session.findById("wnd[0]/usr/txt%PATH").caretPosition = 74
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[1]/usr/chkRSAQDOWN-COLUMN").Selected = True
session.findById("wnd[1]/usr/ctxtRLGRAP-FILENAME").Text = "C:\Users\Warnecke\OneDrive - AUNDE GROUP\Gui Scripting_CSV\Quelle_Download\V1"
session.findById("wnd[1]/usr/chkRSAQDOWN-COLUMN").SetFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
shtZ_PS_ABR2.Cells(1, 18).Value = session.findById("wnd[0]/sbar").Text
session.findById("wnd[0]/tbar[0]/btn[3]").press
Set shtZ_PS_ABR2 = Nothing
Set objTable = Nothing
End Sub
Mit freundlichen Grüßen Markus.W