SAP Jobsuche bei DV-Treff
Bjoern_SAP
vor 3 Jahre
Hallo Leute,

ich bin neue hier da ich ein Problem habe.

Ich will eine Tabelle aus SAP mit nur 2 Spalten exportieren in Excel.

Da sich die Daten immer mal wieder ändern, möchte ich über ein Makro in Excel die Daten per klick aktualisieren.

Das ist die Grundidee.

Ich bin für alle Ideen offen 😉

Jetzt zu meiner Herangehensweise:

Ich habe ein SAP GUI Skript erstellt in dem ich ganz simpel eine Transaktion öffne, eine Variante auswähle, dann ausführe und dann die Tabelle über die Tabellenkalkulation als xlsx exportiere.

Dann kommt die Exceltabelle ins spiel wo ich die Daten benötige. Dort habe ich ganz einfach über die Funktion "Daten abrufen" die Daten aus der von SAP erstellen Tabelle importiert.

Neben der Importeieren Tabelle habe ich dann ein Button erstellt mit ein einem Makro wo ich das SAP Skript eingebettet habe.

Das Funktioniert auch super.

Also ich klicke auf den Button und er spielt das skript durch, überschreibt die alte Datentabelle und importiert die Daten in die "richtige Excel".

So weit so gut.

Jetzt zu meinem Problem.

In dem Skript ist kein Speicherort hinterlegt also nimmt er immer den Speicherort für die Datentabelle den man als letztes in SAP angewählt hat. Dadurch speichert er die Daten Excel immer wo anders und excel kann die Neuen Daten nicht in die "richtige " Ecxel importieren.

Versteht ihr was ich meine.

wenn nicht dann einfach schreiben ich versuche mich anders auszudrücken.

hier mal das Makro mit Skript:

Sub SAP()

On Error GoTo Err_NoSAP

If Not IsObject(SAPGuiApp) Then

Set SapGuiAuto = GetObject("SAPGUI")

Set SAPGuiApp = SapGuiAuto.GetScriptingEngine

End If

If Not IsObject(Connection) Then

Set Connection = SAPGuiApp.Children(0)

End If

If Not IsObject(SAP_session) Then

Set SAP_session = Connection.Children(0)

End If

If IsObject(WScript) Then

WScript.ConnectObject SAP_session, "on"

WScript.ConnectObject SAPGuiApp, "on"

End If

If (Connection.Children.Count > 1) Then GoTo Err_TooManySAP

Set aw = SAP_session.ActiveWindow()

aw.FindById("wnd[0]").Maximize

On Error GoTo Err_Description

'SAP Skript

SAP_session.FindById("wnd[0]").Maximize

SAP_session.FindById("wnd[0]/tbar[0]/okcd").Text = "/nih08"

SAP_session.FindById("wnd[0]").SendVKey 0

SAP_session.FindById("wnd[0]/tbar[1]/btn[17]").Press

SAP_session.FindById("wnd[1]/usr/txtENAME-LOW").Text = "De813478"

SAP_session.FindById("wnd[1]/usr/txtENAME-LOW").SetFocus

SAP_session.FindById("wnd[1]/usr/txtENAME-LOW").CaretPosition = 8

SAP_session.FindById("wnd[1]/tbar[0]/btn[8]").Press

SAP_session.FindById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").CurrentCellRow = 2

SAP_session.FindById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").SelectedRows = "2"

SAP_session.FindById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").DoubleClickCurrentCell

SAP_session.FindById("wnd[0]/tbar[1]/btn[8]").Press

SAP_session.FindById("wnd[0]/tbar[1]/btn[32]").Press

SAP_session.FindById("wnd[1]/usr/tabsG_TS_ALV/tabpALV_M_R1/ssubSUB_DYN0510:SAPLSKBH:0620/btnAPP_FL_SING").Press

SAP_session.FindById("wnd[1]/usr/tabsG_TS_ALV/tabpALV_M_R1/ssubSUB_DYN0510:SAPLSKBH:0620/btnAPP_FL_SING").Press

SAP_session.FindById("wnd[1]/usr/tabsG_TS_ALV/tabpALV_M_R1/ssubSUB_DYN0510:SAPLSKBH:0620/cntlCONTAINER1_LAYO/shellcont/shell").CurrentCellRow = 2

SAP_session.FindById("wnd[1]/usr/tabsG_TS_ALV/tabpALV_M_R1/ssubSUB_DYN0510:SAPLSKBH:0620/cntlCONTAINER1_LAYO/shellcont/shell").SelectedRows = "2"

SAP_session.FindById("wnd[1]/usr/tabsG_TS_ALV/tabpALV_M_R1/ssubSUB_DYN0510:SAPLSKBH:0620/btnAPP_WL_SING").Press

SAP_session.FindById("wnd[1]/usr/tabsG_TS_ALV/tabpALV_M_R1/ssubSUB_DYN0510:SAPLSKBH:0620/cntlCONTAINER1_LAYO/shellcont/shell").CurrentCellRow = 0

SAP_session.FindById("wnd[1]/usr/tabsG_TS_ALV/tabpALV_M_R1/ssubSUB_DYN0510:SAPLSKBH:0620/cntlCONTAINER1_LAYO/shellcont/shell").SelectedRows = "0"

SAP_session.FindById("wnd[1]/usr/tabsG_TS_ALV/tabpALV_M_R1/ssubSUB_DYN0510:SAPLSKBH:0620/btnAPP_WL_SING").Press

SAP_session.FindById("wnd[1]/tbar[0]/btn[0]").Press

SAP_session.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell").ContextMenu

SAP_session.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell").SelectContextMenuItem "&XXL"

SAP_session.FindById("wnd[1]/usr/radRB_OTHERS").SetFocus

SAP_session.FindById("wnd[1]/usr/radRB_OTHERS").Select

SAP_session.FindById("wnd[1]/usr/cmbG_LISTBOX").SetFocus

SAP_session.FindById("wnd[1]/usr/cmbG_LISTBOX").Key = "10"

SAP_session.FindById("wnd[1]/tbar[0]/btn[0]").Press

SAP_session.FindById("wnd[1]/usr/ctxtDY_FILENAME").Text = "Equipment_Liste.XLSX"

SAP_session.FindById("wnd[1]/usr/ctxtDY_FILENAME").CaretPosition = 15

SAP_session.FindById("wnd[1]/tbar[0]/btn[11]").Press

'Aktualisierung der Tabelle

ActiveWorkbook.RefreshAll

On Error GoTo Err_Description

'InfoBox das die Aktualisierung erfolgreich war

MsgBox ("Aktualisierung erfolgreich"), vbInformation, _

"Info..."

Exit Sub

'Error Nachrichten

Err_Description:

MsgBox ("Das Programm hat einen Fehler erzeugt;" & Chr(13) & _

"der Grund für diesen Fehler ist unbekannt."), vbInformation, _

"Info..."

Exit Sub

Err_NoSAP:

MsgBox ("Sie haben SAP nicht geöffnet oder " & Chr(13) & _

"Skripting wurde deaktiviert."), vbInformation, _

"Info..."

Exit Sub

Err_TooManySAP:

MsgBox ("Sie dürfen nur einen SAP-Modus geöffnet haben. " & Chr(13) & _

"Bitte schließen Sie alle anderen offenen SAP-Sitzungen."), vbInformation, _

"Info..."

Exit Sub

End Sub

ScriptMan
vor 3 Jahre
Hallo Bjoern_SAP,

auf die TA IH08 habe ich leider keinen Zugriff, aber ich kann mir vorstellen, dass man auch dort einen Dateipfad voreinstellen könnte.

z.B.

...

SAP_session.FindById("wnd[1]/usr/ctxtDY_FILENAME").Text = "Equipment_Liste.XLSX"

'nachfolgendes Kommando ist nicht notwendig

'SAP_session.FindById("wnd[1]/usr/ctxtDY_FILENAME").CaretPosition = 15

'neu

SAP_session.findById("wnd[1]/usr/ctxtDY_PATH").text = "c:\tmp"

SAP_session.FindById("wnd[1]/tbar[0]/btn[11]").Press

...

Grüße, ScriptMan