Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Werte aus SAP in Excel kopieren

Werte aus SAP in Excel kopieren
07.03.2019 10:53:38
Christian
Moin alle zusammen,
bitte nicht von der Länge des Codes verschrecken lassen. Es geht mir im Folgenden um die schwarz markierten Stellen. Ich möchte zwei Felder aus SAP mit einer For-Schleife in meine Excel Mappe kopieren. Denn umgekehrten Weg habe ich bereits geschafft, also Werte aus Excel in SAP zu kopieren.
session.findById("wnd[0]/usr/tabsTAB_GROUP_10/tabp10\TAB01/ssubSUB_GROUP_10:SAPLIQS0:7235/subCUSTOM_SCREEN:SAPLIQS0:7212/subSUBSCREEN_2:SAPLIQS0:7790/subUSER0001:SAPLXQQM:2000/txtZSD_CLAIM-ZZRFR").Text = Delivery
Delivery = .Range("B" & lngAktZeile).Value

In diesem Abschnitt lasse ich denn Wert aus dem Feld in SAP in eine Variable übertragen um Sie danach in meine Excel Mappe zu kopieren. Leider funktioniert es nicht. Habt Ihr eine Idee?
Beste Grüße
Christian

Option Explicit
Sub Makro()
Dim Application As Object
Dim Connection As Object
Dim session As Object
Dim SapGuiAuto As Object
Dim langID As Long
Dim wsList As Worksheet
Dim wsZiel As Worksheet
Dim wsIPO As Worksheet
Dim lngLZeileListeQuelle As Long
Dim lngLZeileListeZiel As Long
Dim lngAktZeile As Long
Dim wbName As String
Dim wsName As String
Dim ZeileMax As Long
Dim Number As String
Dim Delivery, Item As Integer
Set SapGuiAuto = GetObject("SAPGUI")
Set Application = SapGuiAuto.GetScriptingEngine
Set Connection = Application.Children(0)
Set session = Connection.Children(0)
Set wsZiel = tblClaims
With tblClaims
ZeileMax = .Range("A65536").End(xlUp).Row
For lngAktZeile = 1 To ZeileMax
Number = .Range("A" & lngAktZeile).Value
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
session.findById("wnd[0]/tbar[0]/okcd").Text = "clm2"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtRIWO00-QMNUM").Text = Number
session.findById("wnd[0]/usr/ctxtRIWO00-QMNUM").caretPosition = 9
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/tabsTAB_GROUP_10/tabp10\TAB01/ssubSUB_GROUP_10:SAPLIQS0:7235/ _
subCUSTOM_SCREEN:SAPLIQS0:7212/subSUBSCREEN_2:SAPLIQS0:7790/subUSER0001:SAPLXQQM:2000/txtZSD_CLAIM-ZZRFR").Text = Delivery
Delivery = .Range("B" & lngAktZeile).Value
session.findById("wnd[0]/usr/tabsTAB_GROUP_10/tabp10\TAB01/ssubSUB_GROUP_10:SAPLIQS0:7235/ _
subCUSTOM_SCREEN:SAPLIQS0:7212/subSUBSCREEN_2:SAPLIQS0:7790/subUSER0001:SAPLXQQM:2000/txtZSD_CLAIM-ZZFLSTD").Text = Item
Item = wsZiel.Range("C" & lngAktZeile).Value
session.findById("wnd[0]/usr/tabsTAB_GROUP_10/tabp10\TAB01/ssubSUB_GROUP_10:SAPLIQS0:7235/ _
subCUSTOM_SCREEN:SAPLIQS0:7212/subSUBSCREEN_2:SAPLIQS0:7790/subUSER0001:SAPLXQQM:2000/txtZSD_CLAIM-ZZFLSTD").SetFocus
session.findById("wnd[0]/usr/tabsTAB_GROUP_10/tabp10\TAB01/ssubSUB_GROUP_10:SAPLIQS0:7235/ _
subCUSTOM_SCREEN:SAPLIQS0:7212/subSUBSCREEN_2:SAPLIQS0:7790/subUSER0001:SAPLXQQM:2000/txtZSD_CLAIM-ZZFLSTD").caretPosition = 2
session.findById("wnd[0]/tbar[0]/btn[3]").press
Next lngAktZeile
End With
End Sub

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nachtrag
07.03.2019 14:37:04
Christian
Meon Problem liegt darin, dass ich nicht weiß wie ich ein Feld in SAP ansprechen soll um dann denn Wert in eine Excel Zelle zu übertragen.
Das schwarz markierte ist mein Code, der restliche wird mir vom Script Recorder vorgegeben.

session.findById("wnd[0]/usr/tabsTAB_GROUP_10/tabp10\TAB01/ssubSUB_GROUP_10:SAPLIQS0:7235/subCUSTOM_SCREEN:SAPLIQS0:7212/subSUBSCREEN_2:SAPLIQS0:7790/subUSER0001:SAPLXQQM:2000/txtZSD_CLAIM-ZZRFR").Copy Destination:=wsZiel.Range("B" & lngAktZeile).Value

Anzeige
AW: Nachtrag
07.03.2019 14:43:01
Werner
Hallo Christian,
verstehe ich dich richtig, du hast den Wert aus der SAP-Anwendung bereits in deiner Variablen Delivery bzw. Item?
so würdest du dir dann doch die Variable mit dem Wert aus deiner Excel-Zelle überschreiben
Delivery = .Range("B" & lngAktZeile).Value

Wenn der Wert aus der Variablen Delivery in die Excel-Zelle soll, dann genau andersrum
.Range("B" & lngAktZeile).Value = Delivery
Gruß Werner
Anzeige
First Shoot
07.03.2019 14:56:51
Christian
Mein erster Versuch hat an dieser Stelle keinen Sinn Ergeben. Welche Meinung hast du zu diesem Versuch (Schwarz markierte)?

Option Explicit
Sub Makro()
Dim Application As Object
Dim Connection As Object
Dim session As Object
Dim SapGuiAuto As Object
Dim langID As Long
Dim wsList As Worksheet
Dim wsZiel As Worksheet
Dim wsIPO As Worksheet
Dim lngLZeileListeQuelle As Long
Dim lngLZeileListeZiel As Long
Dim lngAktZeile As Long
Dim wbName As String
Dim wsName As String
Dim ZeileMax As Long
Dim Number As String
Dim Delivery, Item As Integer
Set SapGuiAuto = GetObject("SAPGUI")
Set Application = SapGuiAuto.GetScriptingEngine
Set Connection = Application.Children(0)
Set session = Connection.Children(0)
Set wsZiel = tblClaims
With tblClaims
ZeileMax = .Range("A65536").End(xlUp).Row
For lngAktZeile = 16 To ZeileMax
Number = .Range("A" & lngAktZeile).Value
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]/tbar[0]/okcd").Text = "CLM2"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtRIWO00-QMNUM").Text = Number
session.findById("wnd[0]/usr/ctxtRIWO00-QMNUM").caretPosition = 9
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/tabsTAB_GROUP_10/tabp10\TAB01/ssubSUB_GROUP_10:SAPLIQS0:7235/ _
subCUSTOM_SCREEN:SAPLIQS0:7212/subSUBSCREEN_2:SAPLIQS0:7790/subUSER0001:SAPLXQQM:2000/txtZSD_CLAIM-ZZRFR").Copy Destination:=wsZiel.Range("B" & lngAktZeile).Value
session.findById("wnd[0]/usr/tabsTAB_GROUP_10/tabp10\TAB01/ssubSUB_GROUP_10:SAPLIQS0:7235/ _
subCUSTOM_SCREEN:SAPLIQS0:7212/subSUBSCREEN_2:SAPLIQS0:7790/subUSER0001:SAPLXQQM:2000/txtZSD_CLAIM-ZZFLSTD").Text.Copy Destination:=wsZiel.Range("C" & lngAktZeile).Value
session.findById("wnd[0]/usr/tabsTAB_GROUP_10/tabp10\TAB01/ssubSUB_GROUP_10:SAPLIQS0:7235/ _
subCUSTOM_SCREEN:SAPLIQS0:7212/subSUBSCREEN_2:SAPLIQS0:7790/subUSER0001:SAPLXQQM:2000/txtZSD_CLAIM-ZZFLSTD").SetFocus
session.findById("wnd[0]/usr/tabsTAB_GROUP_10/tabp10\TAB01/ssubSUB_GROUP_10:SAPLIQS0:7235/ _
subCUSTOM_SCREEN:SAPLIQS0:7212/subSUBSCREEN_2:SAPLIQS0:7790/subUSER0001:SAPLXQQM:2000/txtZSD_CLAIM-ZZFLSTD").caretPosition = 2
session.findById("wnd[0]/tbar[0]/btn[3]").press
Next lngAktZeile
End With
End Sub

Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Werte aus SAP in Excel kopieren


Schritt-für-Schritt-Anleitung

  1. SAP GUI Scripting aktivieren: Stelle sicher, dass die SAP GUI Scripting-Funktion aktiviert ist. Dies ist notwendig, um Daten aus SAP in Excel zu kopieren.

  2. VBA-Umgebung öffnen: Öffne Excel, gehe auf Entwicklertools und dann auf Visual Basic, um die VBA-Entwicklungsumgebung zu starten.

  3. Neues Modul erstellen: Klicke mit der rechten Maustaste auf VBAProject und wähle Einfügen > Modul.

  4. Code eingeben: Füge den folgenden Code in das Modul ein. Passe die Zeilen an deine spezifischen SAP-Felder und Excel-Zellen an.

    Option Explicit
    Sub Makro()
       Dim Application As Object
       Dim Connection As Object
       Dim session As Object
       Dim SapGuiAuto As Object
       Dim wsZiel As Worksheet
       Dim lngAktZeile As Long
       Set SapGuiAuto = GetObject("SAPGUI")
       Set Application = SapGuiAuto.GetScriptingEngine
       Set Connection = Application.Children(0)
       Set session = Connection.Children(0)
       Set wsZiel = ThisWorkbook.Sheets("DeinSheetName") ' Ersetze mit deinem Arbeitsblattnamen
    
       For lngAktZeile = 1 To 10 ' Anzahl der Zeilen anpassen
           session.findById("wnd[0]/tbar[0]/okcd").Text = "clm2"
           session.findById("wnd[0]").sendVKey 0
           session.findById("wnd[0]/usr/ctxtRIWO00-QMNUM").Text = wsZiel.Range("A" & lngAktZeile).Value
           session.findById("wnd[0]/usr/ctxtRIWO00-QMNUM").caretPosition = 9
           session.findById("wnd[0]").sendVKey 0
           wsZiel.Range("B" & lngAktZeile).Value = session.findById("wnd[0]/usr/tabsTAB_GROUP_10/tabp10/TAB01/ssubSUB_GROUP_10:SAPLIQS0:7235/subCUSTOM_SCREEN:SAPLIQS0:7212/subSUBSCREEN_2:SAPLIQS0:7790/subUSER0001:SAPLXQQM:2000/txtZSD_CLAIM-ZZRFR").Text
       Next lngAktZeile
    End Sub
  5. Makro ausführen: Speichere den Code und führe das Makro aus, um die Werte aus SAP in Excel zu kopieren.


Häufige Fehler und Lösungen

  • Fehler bei der Verbindung zu SAP: Stelle sicher, dass die SAP GUI korrekt geöffnet und die Scripting-Funktion aktiviert ist. Überprüfe auch die Berechtigungen.

  • Falsche Identifizierung der SAP-Felder: Prüfe die IDs der SAP-Felder. Diese können je nach SAP-Version variieren. Verwende den SAP Scripting Recorder, um die korrekten IDs zu ermitteln.

  • Werte werden nicht korrekt übertragen: Überprüfe deine Logik im Code. Du solltest sicherstellen, dass du die Werte aus den SAP-Feldern korrekt in die Excel-Zellen überträgst.


Alternative Methoden

  • Direktes Kopieren: Du kannst versuchen, die Werte direkt aus SAP zu kopieren, indem du sie im SAP-Fenster markierst und dann in Excel einfügst. Dies ist jedoch nicht immer zuverlässig und kann bei großen Datenmengen unpraktisch sein.

  • Verwendung von Power Query: Eine weitere Möglichkeit, SAP-Daten zu importieren, ist die Verwendung von Power Query in Excel. Damit kannst du Daten direkt aus der SAP-Datenbank abrufen.


Praktische Beispiele

Hier sind einige Beispiele, wie du Werte aus verschiedenen SAP-Feldern in Excel übertragen kannst:

  1. Übertragung eines einzelnen Wertes:

    wsZiel.Range("B" & lngAktZeile).Value = session.findById("wnd[0]/usr/tabsTAB_GROUP_10/tabp10/TAB01/ssubSUB_GROUP_10:SAPLIQS0:7235/subCUSTOM_SCREEN:SAPLIQS0:7212/subSUBSCREEN_2:SAPLIQS0:7790/subUSER0001:SAPLXQQM:2000/txtZSD_CLAIM-ZZRFR").Text
  2. Übertragung mehrerer Werte:

    wsZiel.Range("B" & lngAktZeile).Value = session.findById("wnd[0]/usr/tabsTAB_GROUP_10/tabp10/TAB01/ssubSUB_GROUP_10:SAPLIQS0:7235/subCUSTOM_SCREEN:SAPLIQS0:7212/subSUBSCREEN_2:SAPLIQS0:7790/subUSER0001:SAPLXQQM:2000/txtZSD_CLAIM-ZZRFR").Text
    wsZiel.Range("C" & lngAktZeile).Value = session.findById("wnd[0]/usr/tabsTAB_GROUP_10/tabp10/TAB01/ssubSUB_GROUP_10:SAPLIQS0:7235/subCUSTOM_SCREEN:SAPLIQS0:7212/subSUBSCREEN_2:SAPLIQS0:7790/subUSER0001:SAPLXQQM:2000/txtZSD_CLAIM-ZZFLSTD").Text

Tipps für Profis

  • Verwende Variablen: Speichere häufig verwendete Werte in Variablen, um die Lesbarkeit deines Codes zu verbessern und die Ausführungsgeschwindigkeit zu erhöhen.

  • Fehlerbehandlung implementieren: Füge Fehlerbehandlungsroutinen hinzu, um besser mit unerwarteten Situationen umzugehen. Dies kann dir helfen, die Stabilität deiner Makros zu erhöhen.

  • SAP GUI Scripting Dokumentation: Nutze die offizielle Dokumentation von SAP, um mehr über die Scripting-Methoden und -Objekte zu lernen.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass SAP GUI Scripting aktiviert ist?
Gehe zu den SAP GUI-Einstellungen und aktiviere die Option für das Scripting unter Optionen > Scripting.

2. Was tun, wenn mein Makro nicht funktioniert?
Überprüfe deinen Code auf Fehler, stelle sicher, dass alle IDs korrekt sind, und überprüfe die Verbindung zu SAP.

3. Kann ich auch mehrere Zeilen aus SAP in Excel kopieren?
Ja, indem du eine Schleife verwendest, kannst du mehrere Zeilen iterativ aus SAP übertragen, wie im Schritt-für-Schritt-Anleitung beschrieben.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige