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 gnagflow  
#1 Geschrieben : Samstag, 25. Januar 2020 15:45:18(UTC)
gnagflow

Beiträge: 2
Germany
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
Jobangebote

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

Offline ScriptMan  
#2 Geschrieben : Samstag, 25. Januar 2020 18:16:18(UTC)
ScriptMan

Beiträge: 284
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-unwanted

Mit ein wenig Arbeit kannst du es für dich anpassen.

Grüße, ScriptMan
Offline gnagflow  
#3 Geschrieben : Montag, 27. Januar 2020 10:20:03(UTC)
gnagflow

Beiträge: 2
Germany
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
Offline ScriptMan  
#4 Geschrieben : Montag, 27. Januar 2020 11:25:46(UTC)
ScriptMan

Beiträge: 284
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
Offline Gosemann  
#5 Geschrieben : Dienstag, 28. Januar 2020 06:11:55(UTC)
Gosemann

Beiträge: 1
Germany
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ützlichBlushing Blushing
Offline Lutz Fricke  
#6 Geschrieben : Mittwoch, 22. April 2020 09:40:46(UTC)
Lutz Fricke

Beiträge: 20
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
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 / Datenschutz -