Hallo Andreas,
das ist mehr Arbeit als du dir vorstellen kannst. Ich hatte ein aehnliches Problem mit Excel und SAP. Ich habe es letztlich ueber die SendKeys Methode geloest, was aber sehr fehleranfaellig ist. Schau dir diese Methode mal an.
Problem hierbei ist, dass du SAP nicht direkt aus Excel steuern kannst. Und du must ueber Excel Befehle immer zwischen SAP und Excel hin und her schalten, da das SAP Fenster immer aktiv im Vordergrund sein muss, um es mit dieser Methode zu steuern. Da du hierbei Tastaturbefehle simulierst, musst du dir die Schritte, die in SAP zu machen sind, erstmal aufschreiben (also z.B. 1 mal runter, 2 mal rechts, Enter usw.) und dann jeden Schritt im Excel mit der SendKey Methode programmieren. Wichtig dabei ist, dass niemand, waehrend das Makro laeuft, Tastatur oder Maus benutzt. Sonst ist alles vor den Ar... und du kannst von vorn anfangen. Und du kannst keine Mausbewegung oder -klick simulieren, nur Tastaturbefehle.
Also es wuerde ungefaehr so ablaufen, wenn du dir die Schritte in SAP aufgeschrieben hast.
1. Excel aktivieren, das Makro starten. Makro kopiert z.B. Wert aus Tabelle 1 , Zelle A1 in die Zwischenablage. Noch einfach mit Copy
2. Per VBA Befehl das SAP Fenster ueber den Fenstertitel aktivieren.
3. Dort dann die Tastaturbefehle ausfuehren lassen, um das richtige Feld zu aktivieren. STRG+V simulieren zum Wert einfuegen.
4. naechsten Wert aus Excel kopieren
5. Wieder SAP Fenster aktivieren, Tastaturbefehle, um ins naechste Feld zu navigieren, STRG+V zum einfuegen
usw., usw., usw.
Also, wie du siehst, nicht so ganz einfach zi loesen. Sehr umfangreiche Arbeit.
Hier mal ein Auszug aus meiner Programmierung. Ist aber nur ein kleiner Teil. Nur, dass du mal siehst, was du vorhast.
Ich oeffne hier eine Liste in SAP und kopiere diese in eine Excel Tabelle. Felder in SAP beschreibe ich in dem Fall direkt mit einem String:
Sub SAP_extract_overdue_E50()
Application.ScreenUpdating = False
clear_clipboard
aktWB = "Activity_Tracker_Backend_E50_V3.xlsm"
ARaktWB = "'Activity_Tracker_Backend_E50_V3.xlsm'"
nowWB = path & aktWB
aktApp = "Dynamic availability check, display table contents from ZMM_ZDAC" 'der Fenstertitel des SAP Fensters
AppActivate (aktApp) 'das Fenster aktivieren
'nachfolgend die Schritte, die in SAP ausgefuehrt werden muessen
SendKeys "+{F5}", True
Application.Wait (Now + TimeValue("0:00:03"))
SendKeys ("E50_ODMT"), True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "{ENTER}", True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "{DOWN 2}", True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "+{End}", True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "{Delete}", True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "{F8}", True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "{F8}", True
Lcounter = 1
1: Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "^{a}", True
Application.Wait (Now + TimeValue("0:00:06"))
SendKeys "^{c}", True
Application.Wait (Now + TimeValue("0:00:02"))
If ClipboardEmpty = True And Lcounter <> 10 Then
Lcounter = Lcounter + 1
SendKeys "{ENTER}", True
GoTo 1
Else
Application.DisplayAlerts = False
Application.EnableEvents = False
Workbooks.Open Filename:=nowWB, UpdateLinks:=False
On Error GoTo NextStep
With Workbooks(aktWB)
.Sheets("Daily Overdues").Range("A2").PasteSpecial
End With
Application.EnableEvents = True
Application.DisplayAlerts = True
clear_clipboard
NextStep: Workbooks(aktWB).Close savechanges:=True
End If
Call SAP_extract_overdue_E51
End Sub
Also sag bescheid, wenn du hierzu Tipps oder Hilfe brauchst.
Gruss Torsten
|