Beiträge: 2 
|
Hallo,
aus Excel gehe ich nach SAP um mir einen Bericht zurück nach Excel zu holen und diesen dann in Excel zu formatieren und zu sortieren. In SAP anmelden und den Export aus SAP erstellen funktioniert. Wenn ich am Ende des Scripts dann versuche die Datei anzusprechen, z. Bsp. mit 'Workbooks.("export.xlsx").activate oder irgendeinen anderen Befehl, erhalte ich einen Fehler und die Datei export.xlsx ist nicht sichtbar, auch wenn ich vorher ein Application.wait oder wscript.sleep verwende. Setze ich aber einen Halt beim activate-Befehl, wird die "export.xlsx" sichtbar, ist aktiv und kann bearbeitet werden. Der activate-Befehlt funktioniert dann auch und das Script läuft weiter. Ein Workaround wäre sicherlich das Script an der Stelle zu beenden und den Rest über ein zusätzliches Script zu starten. Das wäre aber unschön. Hat jemand von Euch eine Idee, wie ich das lösen kann? Ich habe heute auch schon einige Stunden recherchiert, konnte aber keine Lösung finden. Versionen: Excel 365 und SAPGui 750.
Vielen Dank und Gruß Wolfgang
|
|
|
|
|
Hallo Wolfgang, willkommen im Forum. Dein Problem wäre besser unter GuiXT aufgehoben. SAP Script und SAP GUI Scripting sind zwei verschiedene Themen. Siehe dir bitte folgenden Link an: https://stackoverflow.co...macro-completes-unwantedMit ein wenig Arbeit kannst du es für dich anpassen. Grüße, ScriptMan
|
|
|
|
Beiträge: 2 
|
Hallo Scriptman,
vielen Dank für Deine Antwort und sorry, dass ich Thema unter der falschen Rubrik eingegeben habe. Vielleicht könntest Du das korrigieren und der richtigen Rubrik zuordnern. Ich habe den von Dir genannten Link angesehen und den Code bei mir angepasst. Der Code läuft auch im Debugging-Modus, wenn ich einen Halt einfüge bei mir durch. Sobald ich es durchlaufen lasse, kommt die Fehlermeldung, dass die personal.xlsb gesperrt ist, da die Export-Datei in einer neuen Instanz geöffnet wird. Auch wenn ich application.enableevents und application.displayalerts auf false setze, führt das zu keiner Verbesserung. Excel hängt sich auf und kann auch nicht mehr mit der Tastenkombi STRG-Pause unterbrochen werden. Es hilft nur ein Killen des Prozesses. Ich habe bei der Recherche keinen Hinweis gefunden, wie ich via VBA verhindern kann, dass bei einer neuen Instanz die Inhalte des XLSTART-Ordners nicht mitgestartet werden. Anbei der Ausschnitt aus meinem Code: ................... .findById("wnd[1]/tbar[0]/btn[11]").press End With '# Export-Datei beenden Application.EnableEvents = False Application.DisplayAlerts = False SAP_Workbook = "export.xlsx" On Error Resume Next Do Err.Clear Set xclApp = GetObject(, "Excel.Application") If Err.Number = 0 Then Exit Do 'msgbox "Wait for Excel session" WScript.sleep 2000 objSess.findById("wnd[0]").Iconify objSess.findById("wnd[0]").Maximize Loop ' Application.EnableEvents = True ' Application.EnableEvents = False
Do Err.Clear Set xclwbk = xclApp.Workbooks.Item(SAP_Workbook) If Err.Number = 0 Then Exit Do 'msgbox "Wait for SAP workbook" WScript.sleep 2000 Loop Application.DisplayAlerts = True Application.EnableEvents = True On Error GoTo 0 Set xclsheet = xclwbk.Worksheets(1) xclApp.Visible = True xclApp.DisplayAlerts = False xclApp.ActiveWorkbook.Close
Set xclwbk = Nothing Set xclsheet = Nothing xclApp.Quit Set xclApp = Nothing ............... Ich möchte mich noch einmal besonders bei Dir bedanken, weil mir Deine Antworten in diesem Forum schon oft geholfen und mich weiter voran gebracht haben.
Viele Grüße Wolfgang
|
|
|
|
|
Hallo Wolfgang, in dem Link befand sich noch ein anderer Beitrag vom 23.11.2016 und der war dann der Richtige. Am Ende ist es auch nur ein Workaround, der aber ohne weiteres zu tun, funktionieren müsste. Dein Beitrag kann nur ein Administrator dieses Portals verschieben und das bin ich nicht. Danke aber für Deine anerkennenden Worte. z.B. Code:...................
.findById("wnd[1]/tbar[0]/btn[11]").press
End With
'# Export-Datei beenden
set Wshell = CreateObject("WScript.Shell")
Wshell.run "c:\tmp\SAP_Workbook_Close.vbs",1,false
End Sub
SAP_Workbook_Close.vbs:
SAP_Workbook = "SAP_export.xlsx"
on error resume next
do
err.clear
Set xclApp = GetObject(, "Excel.Application")
If Err.Number = 0 Then exit do
'msgbox "Wait for Excel session"
wscript.sleep 2000
loop
do
err.clear
Set xclwbk = xclApp.Workbooks.Item(SAP_Workbook)
If Err.Number = 0 Then exit do
'msgbox "Wait for SAP workbook"
wscript.sleep 2000
loop
on error goto 0
Set xclSheet = xclwbk.Worksheets(1)
xclApp.Visible = True
xclapp.DisplayAlerts = false
xclapp.ActiveWorkbook.Close
Set xclwbk = Nothing
Set xclsheet = Nothing
'xclapp.Quit
set xclapp = Nothing
Grüße, ScriptMan
|
|
|
|
Beiträge: 1  Wohnort: Bayern - Eckental
|
Hallo Ich neu hier im Forum und das ist sozusagen mein erster Beitrag. Eigentlich habe ich mich hier angemeldet weil ich auf der Suche nach einer Anbindung für Kyocera Drucker unter SAP bin und dann fiel gleich dieser Beitrag ins Auge. Ich bin keine großer SAP User oder VBA Programmierer aber dennoch habe ich es geschafft ein Tool für unser Unternehmen zu schreiben bei dem man mit einem Scanner TA-Nummern erfasst und diese dann mit LT12 automatisch quittiert und danach wird mit LT22 eine Liste mit noch allen offenen Positionen gezogen. Ich glaube oder ich vermute mal das Problem zu kennen.Im VBA Script kommt die Anweisung zB. wie bei mir eine LT22 Liste zu exportieren und du versuchst die Daten dann einzulesen und Excel findet die Instanz nicht denn sie ich nicht da , oder noch nicht da denn die Instanz kommt von SAP. Seltsamerweise hatte ich diese Probleme vorher nicht und mit vorher meine ich vor Office365. Zusätzlich zu Office365 kam noch dazu das die Export.xlsx sich immer in den Vordergrund geschoben hatte. Gelöst habe ich das bzw. der Zufall hat es für mich gelöst indem ich das Script in eine Userform gepackt und diese beim starten Excel mit Application.visible = false versteckt habe. Eine zweite Möglichkeit wäre, die mir jetzt gerade beim schreiben einfällt und die ich später mal testen werde ist: Ich erstelle eine leere Access Datenbank und in dieser eine Verknüpfung zur Export.xlsx. Access schließen und Export löschen und im Script in einer Schleife bis dir(exportt.xlsx)=true und dann in Excel mit ADODB zugreifen. Soviel zu meinem ersten Beitrag und ich hoffe mal er ist nützlich
|
|
|
|
|
Hallo zusammen, ich habe auch das oben beschriebene Problem. Merkwürdigerweise nur bei einigen Transaktionen. Aus der COOISPI heraus läuft's perfekt. SAP öffnet automatisch eine neue Instanz, die ich dann sauber abarbeiten kann. Aus der MB51 heraus läuft es aber einfach nicht. Wie beschrieben erscheint nach Ende des Makros die exportierte Datei oder, wenn sie im Makro wieder gelöscht wurde, eine entsprechende Fehlermeldung. @Scriptman, du hast im verlinkten Threat zuletzt noch eine neuere Lösung gepostet: Zitat:... ' Export from SAP to .xlsx file. Session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").contextMenu Session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectContextMenuItem "&XXL" Session.findById("wnd[1]/tbar[0]/btn[0]").press Session.findById("wnd[1]/usr/ctxt[0]").Text = "C:\tmp" Session.findById("wnd[1]/usr/ctxt[1]").Text = "SAP_export.XLSX" Session.findById("wnd[1]/tbar[0]/btn[11]").press
Dim xlApp As Object Application.Wait Now + TimeSerial(0, 0, 5)
Set xlApp = GetObject("c:\tmp\SAP_export.XLSX").Application
xlApp.Workbooks(1).Close False 'xlApp.Quit ... Das habe ich probiert, aber leider schließt mir das Makro dann die Instanz mit dem Makro selbst... Und wenn ich den Code richtig lese, ist das ja auch korrekt. Wie behalte ich mein Makro am Laufen und wo genau kommt der Code zur Bearbeitung der Export-Datei hin. @gosemann, was genau meinst Du mit "in eine Userform gepackt"? Hast Du nen Beispielcode für mich? Vielen Dank, Lutz Fricke
|
|
|
|
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.