Karriere bei Brose
  • 36 User online von 18,799 Mitgliedern
  • 50,195 Beiträge zu 13,791 Themen
  • 36 User online von 18,799 Mitgliedern
  • 50,195 Beiträge zu 13,791 Themen
02196 7066-717
Willkommen Gast! Um alle Funktionen zu aktivieren müssen Sie sich Anmelden oder Registrieren.

Mitteilung

Icon
Error

Optionen
Gehe zum aktuellsten Beitrag Gehe zum letzten Ungelesenen
Offline Juergen Mayer  
#1 Geschrieben : Dienstag, 8. August 2017 07:32:24(UTC)
Juergen Mayer

Beiträge: 3
Germany
Wohnort: Rehden
Hallo GuiXT-Community: Ich habe mich an einem Script versucht, das Werte aus einem Excel-Sheet einliest und damit den TAC "LS01N" wiederholt befüllt. Eigentlich sollte das Script nach der letzten befüllten Excel-Zeile eine Meldung ausgeben, bricht aber immer mit "The Method got an invalid Argument" ab. Die Lagerplätze werden aber "richtig" angelegt. Das Problem ist also ein rein "kosmetisches". Wer kann mir hier eventuell weiterhelfen?

Mein Script:

'**************************************************************
' allg. SAPScript-Parameter
'**************************************************************
If Not IsObject(application) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = application.Children(0)
End If
If Not IsObject(session) Then
Set session = connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject application, "on"
End If



'**************************************************************
' Aufruf der Transaktion LS01N
'**************************************************************
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").text = "/nLS01N"
session.findById("wnd[0]").sendVKey 0


'**************************************************************
' Parameter für XLSX-Datei und Befüllen der Felder
'**************************************************************
'Dim ExcelApp, ExcelWB, ExcelWS
set ExcelApp=createobject("Excel.Application")
ExcelApp.visible=true
set ExcelWB=ExcelApp.Workbooks.Open("P:\10062069\guixt\scripts - Entwicklung\Lagerplaetze und Veriffeld\Plaetze.xlsx")
set ExcelWS=ExcelWB.Worksheets("Tabelle1")


for i = 2 to ExcelApp.ActiveCell.SpecialCells(11).Row

for j = 1 to ExcelApp.ActiveCell.SpecialCells(11).Column
if j=1 then LGNUM = ExcelWS.Cells(i,j).Value
if j=2 then LGTYP = ExcelWS.Cells(i,j).Value
if j=3 then LGBER = ExcelWS.Cells(i,j).Value
if j=4 then LPTYP = ExcelWS.Cells(i,j).Value
if j=5 then LGPLA = ExcelWS.Cells(i,j).Value
next

session.findById("wnd[0]/usr/ctxtLAGP-LGNUM").text = LGNUM
session.findById("wnd[0]/usr/ctxtLAGP-LGTYP").text = LGTYP
session.findById("wnd[0]/usr/ctxtLAGP-LGPLA").text = LGPLA

session.findById("wnd[0]/usr/ctxtLAGP-LGPLA").setFocus
session.findById("wnd[0]/usr/ctxtLAGP-LGPLA").caretPosition = 10
session.findById("wnd[0]/usr/btnREFRESH").press
session.findById("wnd[0]").sendVKey 0

session.findById("wnd[0]/usr/tabsFUNC_TABSTRIP/tabpALLG/ssubD0400_S:SAPML01S:4001/ctxtLAGP-LGBER").text = LGBER
session.findById("wnd[0]/usr/tabsFUNC_TABSTRIP/tabpALLG/ssubD0400_S:SAPML01S:4001/ctxtLAGP-LPTYP").text = LPTYP
session.findById("wnd[0]/usr/tabsFUNC_TABSTRIP/tabpALLG/ssubD0400_S:SAPML01S:4001/txtLAGP-VERIF").text = LGPLA


session.findById("wnd[0]/usr/tabsFUNC_TABSTRIP/tabpALLG/ssubD0400_S:SAPML01S:4001/txtLAGP-VERIF").setFocus
session.findById("wnd[0]/usr/tabsFUNC_TABSTRIP/tabpALLG/ssubD0400_S:SAPML01S:4001/txtLAGP-VERIF").caretPosition = 10
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[0]/btn[11]").press


next


msgbox "Alle Lagerplätze wurden angelegt."


ExcelWB.Close
ExcelApp.Quit

Nehmen Sie an dieser Diskussion teil! SAP FORUM - SAP Community LoginHier registrieren.

Offline ScriptMan  
#2 Geschrieben : Dienstag, 8. August 2017 11:18:41(UTC)
ScriptMan

Beiträge: 227
Hallo Jürgen,

wenn alles ordentlich angelegt wurde, dann kann es nur eine leere Zeile im Excel sein, die nach den tatsächlichen Daten folgt. Diese müsste gelöscht und die Excel-Mappe erneut abgespeichert werden. Zur Kontrolle könnte man STRG/Ende drücken, um zu sehen, dass der Cursor tatsächlich in der letzten Zeile mit einem Inhalt landet.

Grüße,
ScriptMan
Offline Juergen Mayer  
#3 Geschrieben : Dienstag, 8. August 2017 11:34:39(UTC)
Juergen Mayer

Beiträge: 3
Germany
Wohnort: Rehden
Danke ScriptMan!

Genau das war der Fehler - hatte ich so nicht auf der Pfanne!

Nochmals Danke und gute Zeit!
Offline Okamasi  
#4 Geschrieben : Dienstag, 5. September 2017 14:04:29(UTC)
Okamasi

Beiträge: 4
Hallo zusammen,

ich bin was Scripting in SAP angeht relativ neu, sehe bei uns im Unternehmen aber das Potenzial dafür. Scripte mit dem Recorder aufzeichnen um Daten zu exportieren, diese in Excel über Makros weiterverarbeiten lassen, etc. klappt schon ziemlich gut. Als Nächstes möchte ich mich mit dem Import von Daten von Excel nach SAP befassen.

Mein Script basiert auf Jürgens. Der Debugger gibt mir jedoch jedes Mal an, dass er mit der Methode "session.findById" nicht zurecht kommt. Habt ihr irgendeine Vermutung woran das liegen könnte?

Anbei der Code:

If Not IsObject(application) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = application.Children(0)
End If
If Not IsObject(session) Then
Set session = connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject application, "on"
End If
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").text = "/ncor2"
session.findById("wnd[0]").sendVKey 0
'Dim ExcelApp, ExcelWB, ExcelWS
set ExcelApp=createobject("Excel.Application")
ExcelApp.visible=true
set ExcelWB=ExcelApp.Workbooks.Open("C:\usw.\Mappe1.xlsx")
set ExcelWS=ExcelWB.Worksheets("Tabelle1")

Bis hierhin funktioniert alles gut

for i = 2 to ExcelApp.ActiveCell.SpecialCells(11).Row

for j = 1 to ExcelApp.ActiveCell.SpecialCells(11).Column
if j=1 then AUFNR = ExcelWS.Cells(i,j).Value
if j=2 then USR01 = ExcelWS.Cells(i,j).Value
next

session.findByld("wnd[0]/usr/ctxtCAUFVD-AUFNR").text=AUFNR
session.findById("wnd[0]/tbar[1]/btn[6]").press
session.findById("wnd[0]/usr/tblSAPLCOVGTCTRL_5100/txtAFVGD-VORNR[0,9]").setFocus
session.findById("wnd[0]/usr/tblSAPLCOVGTCTRL_5100/txtAFVGD-VORNR[0,9]").caretPosition = 2
session.findById("wnd[0]").sendVKey 2
session.findById("wnd[0]/usr/tabsTABSTRIP_5110/tabpVOUS").select
session.findByld("wnd[0]/usr/ctxtAFVGD-USR01").text=USR01
session.findById("wnd[0]/usr/tabsTABSTRIP_5110/tabpVOUS/ssubSUBSCR_5110:SAPLCOVF:5159/txtAFVGD-USR01").setFocus
session.findById("wnd[0]/usr/tabsTABSTRIP_5110/tabpVOUS/ssubSUBSCR_5110:SAPLCOVF:5159/txtAFVGD-USR01").caretPosition = 6
session.findById("wnd[0]/tbar[0]/btn[3]").press
session.findById("wnd[0]/tbar[0]/btn[11]").press

next

msgbox"Alle Ladedaten eingetragen"

Ziel ist, dass fortlaufend Prozessauftragsnummern aus Excel in die TAC COR2 eingelesen werden, dann in die Vorgänge gesprungen wird und dort in einem Benutzerfeld eine Datumsangabe, wiederum aus Excel, importiert wird.

Danke im Voraus für eure Ideen.

Viele Grüße
Okamasi

Bearbeitet vom Benutzer Mittwoch, 6. September 2017 09:18:12(UTC)  | Grund: Nicht angegeben

Offline Saptimierer  
#5 Geschrieben : Samstag, 9. September 2017 14:18:05(UTC)
Saptimierer

Beiträge: 32
Schau doch mal, ob dies dein Probelm löst:
Code:
Set session = connection.Children(0)

geht davon aus, dass du in der ersten Session arbeiten willst. Falls du mehrere Modi geöffnet hattest und dann irgendwann den ersten geschlossen hast, gibt es connection.Children(0) und damit "Session" einfach nicht.

Offline Okamasi  
#6 Geschrieben : Montag, 11. September 2017 07:43:40(UTC)
Okamasi

Beiträge: 4
Hallo Saptimierer,

danke für den Ansatz. Das hat aber leider nichts bewirkt. Die Fehlermeldung ist nach wie vor dieselbe.
Offline Saptimierer  
#7 Geschrieben : Montag, 11. September 2017 08:23:29(UTC)
Saptimierer

Beiträge: 32
Zitat von: Okamasi Gehe zum zitierten Beitrag
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").text = "/ncor2"
session.findById("wnd[0]").sendVKey 0


Das wundert mich jetzt ein wenig, da die o.a. Zeilen ja noch korrekt verarbeitet werden. Oder?
Offline Okamasi  
#8 Geschrieben : Dienstag, 26. September 2017 13:56:39(UTC)
Okamasi

Beiträge: 4
Hallo Saptimierer,

sorry, dass ich erst jetzt antworte. Die letzten 2 Wochen ging es drunter und drüber.

Ja, die Transaktion wird noch korrekt aufgerufen.
Offline Saptimierer  
#9 Geschrieben : Sonntag, 1. Oktober 2017 10:14:36(UTC)
Saptimierer

Beiträge: 32
Dann weiss ich auch nicht weiter. Warum sollte das Session-Objekt in der Schleife nicht mehr existieren, davor aber schon? Dafür gib es ja eigentlich keinen vernünftigen Grund. Es sei denn, dein geposteter Code entspricht nicht 1:1 deinem echten.

Wir bevorzugen für solche (und andere) Datenimporte SimDia². Da muss man sich um solche Probleme keinen Kopf machen und hat das Ganze in 2 Minuten fertig.
Offline Okamasi  
#10 Geschrieben : Montag, 2. Oktober 2017 11:34:17(UTC)
Okamasi

Beiträge: 4
Danke für deine Hilfe. Ich werde es einfach weiter versuchen.

Habe kürzlich den Job gewechselt und Simdia ist das Tool, dass ich am schmerzlichsten vermisse :)
Benutzer, die gerade dieses Thema lesen
Das Forum wechseln  
Du kannst keine neue Themen in diesem Forum eröffnen.
Du kannst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge nicht löschen.
Du darfst deine Beiträge nicht editieren.
Du kannst keine Umfragen in diesem Forum erstellen.
Du kannst nicht an Umfragen teilnehmen.

- Impressum -