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

Forumthread: Feldinhalt aus SAP kopieren

Feldinhalt aus SAP kopieren
13.10.2021 09:51:33
Gerd
Hallo Zusammen,
ich müüste aus einem SAP Feld kopieren und in einer Tebellen Zelle einfügen.
Folgendes habe ich mir zusammen gestrickt:

Sub Pickliste()
'VL03N zum kopieren der PickNr
objSess.findById("wnd[0]/tbar[0]/okcd").Text = "/nvl03n"
objSess.findById("wnd[0]").sendVKey 0
objSess.findById("wnd[0]").sendVKey 0
' PickNo kopieren
objSess.findById("wnd[0]/usr/subSUBSCREEN_HEADER:SAPMV50A:1502/ctxtLIKP-VBELN").SetFocus
objSess.findById("wnd[0]/usr/subSUBSCREEN_HEADER:SAPMV50A:1502/ctxtLIKP-VBELN").caretPosition = 0
Cells(3, 1) = objSess.findById("wnd[0]/usr/txtLIKP-VBELN").Text
' PickNo Beschriftung drucken
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
:=True, IgnorePrintAreas:=False
Es scheitert an >> Cells(3, 1) = objSess.findById("wnd[0]/usr/txtLIKP-VBELN").Text"
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Feldinhalt aus SAP kopieren
13.10.2021 17:36:22
Yal
Hallo Gerd,
Ist der Code in einer Worksheet-Codepane oder Modul-Codepane?
Bei letzteres sollte das Ziel-Worksheet genau spezifiziert werden

Workskeets("xyz").Cells(3, 1) = ...
Ansonsten bräuchten wir eine Beschreibung, von welche Objekt hier die Rede ist: objSess ?
Vielleicht lässt sich das Vorhaben besser abfangen, wenn eine Objekt-Variable dazwischen verwendet wird (komplett ins Blau geraten):

Set objXxx = objSess.findById("wnd[0]/usr/subSUBSCREEN_HEADER:SAPMV50A:1502/ctxtLIKP-VBELN")
objXxx.SetFocus
objXxx.caretPosition = 0
Cells(3, 1) = objXxx.Text
VG
Yal
Anzeige
AW: Feldinhalt aus SAP kopieren
15.10.2021 07:58:43
Gerd
Hallo Yal,
das hat wunderbar funktioniert! Vielen lieben Dank :)
Ich habe da nur noch eine Frage zu...stehe da wohl ein wenig neben mir :S
Nach der Aktion möchte ich dass im SAP die geöffnete Transaktion VL03N auch wieder verlassen wird.
Ich hatte hinter Deinem Code es so eingegeben, was aber nicht läuft :(

'VL03N zum kopieren der PickNr
objSess.findById("wnd[0]/tbar[0]/okcd").Text = "/nvl03n"
objSess.findById("wnd[0]").sendVKey 0
objSess.findById("wnd[0]").sendVKey 0
' PickNo kopieren
Set objSess = objSess.findById("wnd[0]/usr/subSUBSCREEN_HEADER:SAPMV50A:1502/ctxtLIKP-VBELN")
objSess.SetFocus
objSess.caretPosition = 0
Cells(3, 1) = objSess.Text
' PickNo Beschriftung drucken
'Range("A3").Select
'ActiveSheet.Paste
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
:=True, IgnorePrintAreas:=False
objSess.findById("wnd[0]/tbar[0]/btn[15]").press
Entschuldige bitte, wenn ich mich da ein wenig delettantisch anstelle ;)
Anzeige
AW: Feldinhalt aus SAP kopieren
15.10.2021 16:42:03
Yal
Hallo Gerd,
Diletentisch? passt scho. 4-Angen-Prinzip eben.
Du assignierst richtig dein gefundenen Objekt zu einer Variable, aber es sollte nicht dieselbe sein, wie die vorherige:

Set objSess = objSess.findById("wnd[0]/usr/subSUBSCREEN_HEADER:SAPMV50A:1502/ctxtLIKP-VBELN")
führt dazu, dass objSess nicht mehr auf das übergeordnete Objekt zeigt (Objekt-Variable sind keine "Variable", die eine Wert enthalten, wie x = 2, sondern "Zeiger": sie beinhalten die Adresse, wo der Objekt selbst im Speicher zu finden ist. Sie zeigen (engl. "Pointer") auf dem Objekt).
es genauso wie

Set W = Workbooks("MeineDatei.xlsx")
Set W = W.Worksheets(1)
dann kannst Du nicht mehr den Workbook mit W.Close schliessen, weil W nun auf einem Worksheet-Objekt "zeigt" und Worksheet-Objekt nicht geschlossen werden können.
daher

Set objAndere = objSess.findById("wnd[0]/usr/subSUBSCREEN_HEADER:SAPMV50A:1502/ctxtLIKP-VBELN")
objAndere.SetFocus
objAndere.caretPosition = 0
objSess.findById("wnd[0]/tbar[0]/btn[15]").press
VG
Yal
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Feldinhalt aus SAP kopieren


Schritt-für-Schritt-Anleitung

  1. SAP öffnen: Stelle sicher, dass die SAP-Anwendung läuft und du die Transaktion (z.B. VL03N) geöffnet hast.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

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

  4. Code eingeben: Kopiere den folgenden VBA-Code in das Modul:

    Sub Pickliste()
       Dim objSess As Object
       Set objSess = GetObject("SAPGUI").GetScriptingEngine.Children(0)
       'VL03N zum kopieren der PickNr
       objSess.findById("wnd[0]/tbar[0]/okcd").Text = "/nvl03n"
       objSess.findById("wnd[0]").sendVKey 0
       objSess.findById("wnd[0]").sendVKey 0
       ' PickNo kopieren
       Set objXxx = objSess.findById("wnd[0]/usr/subSUBSCREEN_HEADER:SAPMV50A:1502/ctxtLIKP-VBELN")
       objXxx.SetFocus
       objXxx.caretPosition = 0
       Cells(3, 1) = objXxx.Text
       ' Transaktion verlassen
       objSess.findById("wnd[0]/tbar[0]/btn[15]").press
    End Sub
  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro über ALT + F8 aus.


Häufige Fehler und Lösungen

  • SAP kopieren funktioniert nicht: Stelle sicher, dass die SAP GUI Scripting aktiviert ist. Überprüfe auch, ob die Transaktion korrekt geladen wurde.

  • Objekt nicht gefunden: Wenn beim Ausführen des Codes der Fehler "Objekt nicht gefunden" auftritt, kann es sein, dass die ID im Code nicht mehr aktuell ist. Überprüfe die ID in der SAP-Oberfläche.

  • Zellen in Excel nicht aktualisiert: Achte darauf, dass das richtige Arbeitsblatt aktiviert ist. Du kannst das Arbeitsblatt im Code spezifizieren, z.B. Worksheets("MeinBlatt").Cells(3, 1).


Alternative Methoden

  • SAP mehrere Zellen markieren und kopieren: Anstatt nur ein Feld zu kopieren, kannst du mehrere Zellen in SAP markieren und den Inhalt in Excel einfügen. Dazu musst du die Zellen in SAP markieren und dann den Inhalt in Excel mit CTRL + V einfügen.

  • Direktes Kopieren: Du kannst auch den Inhalt direkt in Excel einfügen, indem du die Felder in SAP markierst und mit CTRL + C kopierst, bevor du in Excel CTRL + V verwendest.


Praktische Beispiele

  • Beispiel 1: Um die Auftragsnummer in Zelle A3 einzufügen, kannst du den folgenden Code verwenden:

    Cells(3, 1) = objXxx.Text
  • Beispiel 2: Wenn du eine SAP Tabelle kopieren möchtest, kannst du auch eine Schleife verwenden, um die Werte aus mehreren Zellen zu extrahieren und in Excel einzufügen:

    For i = 1 To 10
       Cells(i, 1) = objSess.findById("wnd[0]/usr/subXYZ:SAPMV50A:1502/cell[" & i & "]").Text
    Next i

Tipps für Profis

  • Scripting aktivieren: Stelle sicher, dass das SAP GUI Scripting aktiviert ist, um die Automatisierung zu ermöglichen. Ohne diese Funktion kann es sein, dass SAP markieren und kopieren nicht funktioniert.

  • Objektvariablen nutzen: Verwende Objektvariablen, um den Code klarer und leichter wartbar zu machen. Dies hilft dabei, Verwirrung über die verschiedenen Objekte zu vermeiden.

  • Fehlerbehandlung einfügen: Implementiere eine Fehlerbehandlungsroutine in deinem VBA-Code, um potenzielle Probleme während der Ausführung zu identifizieren und zu beheben.


FAQ: Häufige Fragen

1. Warum funktioniert das Kopieren aus SAP in Excel nicht?
Das kann an fehlenden Berechtigungen, deaktiviertem Scripting oder falschen ID-Referenzen liegen. Überprüfe diese Punkte.

2. Wie kann ich mehrere Zellen in SAP markieren und kopieren?
Du kannst die Zellen in SAP mit der Maus oder der Tastatur markieren und dann den Inhalt mit CTRL + C kopieren und in Excel mit CTRL + V einfügen.

3. Ist dieser Prozess in allen Excel-Versionen gleich?
Die beschriebenen Schritte gelten hauptsächlich für Excel 2010 und höher. Bei älteren Versionen können einige Funktionen variieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige