2013-10-18 28 views
6

Kann jemand VBA verwenden, um Daten aus SAP Netweaver zu ziehen?VBA zieht Daten von SAP für Dummies

Ich habe eine Reihe von täglichen Berichten, die Daten aus SAP nach Excel exportieren und in einen Bericht formatieren müssen. Ich habe bereits funktionierende VBA-Makros geschrieben, die die Formatierung durchführen. Ich muss die Daten manuell extrahieren und jedes Berichtsmakro einzeln ausführen. So viel Zeit könnte gespart werden, wenn mein Makro einfach in SAP gehen, die Daten für Bericht Nr. 1 erfassen, formatieren, die Daten für Bericht Nr. 2 übernehmen könnte.

Ich arbeite mit SAP NetWeaver (Release 730, Version 7300.1.3.1079). Die Berichte sind nur Excel-Pivot-Tabellen und Diagramme.

Danke!

+1

Sie geben nicht das Produkt an, von dem Sie Daten exportieren (SAP ist eine Firma, die eine Unmenge von Produkten liefert - über welche sprechen Sie?). Sie geben nicht an, auf welche Berichte oder welche Berichtstechnik Sie Ihre Formatierung anwenden. Es ist schwer, diese Frage ohne weitere Informationen zu beantworten. – vwegert

Antwort

26

Dies hängt davon ab, welche Art von Zugriff Sie auf Ihr SAP-System haben. Ein ABAP-Programm, das die Daten und/oder einen RFC exportiert, den Ihr Makro aufrufen kann, um die Daten direkt zu erhalten oder SAP die Datei erstellen zu lassen, ist wahrscheinlich am besten.

Jedoch als allgemeine Regel Menschen auf der Suche nach dieser Art von Antwort suchen nach einer sofortigen Lösung, die ihre IT-Abteilung monatelang keine Anpassung ihres SAP-Systems erfordern.

In diesem Fall möchten Sie wahrscheinlich SAP GUI Scripting verwenden. Mit SAP GUI Scripting können Sie das Windows SAP GUI auf die gleiche Weise automatisieren, wie Sie Excel automatisieren. Tatsächlich können Sie das SAP GUI direkt von einem Excel-Makro aus aufrufen. Lesen Sie mehr darüber here. Das SAP GUI verfügt ähnlich wie Excel über ein Makro-Aufzeichnungstool. Es zeichnet Makros in VBScript auf, das fast identisch mit Excel VBA ist und normalerweise direkt in ein Excel-Makro kopiert und eingefügt werden kann.

Beispielcode

Hier ist ein einfaches Beispiel basierend auf einem SAP-System, das ich Zugriff habe.

Public Sub SimpleSAPExport() 
    Set SapGuiAuto = GetObject("SAPGUI") 'Get the SAP GUI Scripting object 
    Set SAPApp = SapGuiAuto.GetScriptingEngine 'Get the currently running SAP GUI 
    Set SAPCon = SAPApp.Children(0) 'Get the first system that is currently connected 
    Set session = SAPCon.Children(0) 'Get the first session (window) on that connection 

    'Start the transaction to view a table 
    session.StartTransaction "SE16" 

    'Select table T001 
    session.findById("wnd[0]/usr/ctxtDATABROWSE-TABLENAME").Text = "T001" 
    session.findById("wnd[0]/tbar[1]/btn[7]").Press 

    'Set our selection criteria 
    session.findById("wnd[0]/usr/txtMAX_SEL").text = "2" 
    session.findById("wnd[0]/tbar[1]/btn[8]").press 

    'Click the export to file button 
    session.findById("wnd[0]/tbar[1]/btn[45]").press 

    'Choose the export format 
    session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").select 
    session.findById("wnd[1]/tbar[0]/btn[0]").press 

    'Choose the export filename 
    session.findById("wnd[1]/usr/ctxtDY_FILENAME").text = "test.txt" 
    session.findById("wnd[1]/usr/ctxtDY_PATH").text = "C:\Temp\" 

    'Export the file 
    session.findById("wnd[1]/tbar[0]/btn[0]").press 
End Sub 

Script Recording

zu helfen Um die Namen von Elementen wie wnd[1]/tbar[0]/btn[0] finden Sie Skript Aufnahme verwenden können. Klicken Sie auf die Schaltfläche anpassen lokalen Layout, es sieht wahrscheinlich ein bisschen wie folgt aus: Customize Local Layout
Dann finden Sie den Menüpunkt Skript Aufnahme und Wiedergabe.
Script Recording and Playback
Innerhalb der More Schaltfläche können Sie sehen/ändern Sie die Datei, die das VB-Skript aufgezeichnet wird. Das Ausgabeformat ist ein bisschen chaotisch, es zeichnet Dinge wie Text auswählen, in einem Textfeld klicken, usw.

Edit: Frühe und späte

Die bereitgestellten Skript Bindung sollte, wenn sie direkt in ein VBA-Makro kopiert arbeiten. Es verwendet späte Bindung, die Linie Set SapGuiAuto = GetObject("SAPGUI") definiert das SapGuiAuto-Objekt.

Wenn Sie jedoch die frühe Bindung verwenden möchten, damit Ihr VBA-Editor möglicherweise die Eigenschaften und Methoden der von Ihnen verwendeten Objekte anzeigt, müssen Sie im Installationsordner von SAP GUI einen Verweis auf sapfewse.ocx hinzufügen.

+0

Danke!Ich werde heute mit der Skriptaufnahme experimentieren. Für das, was ich versuche, klingt es nach der besten Option (zumal die SAP DB, mit der ich arbeite, im Besitz eines Kunden ist und ihre IT-Abteilung nichts für mich tun wird). –

+0

Der Link, den Sie der Seite SAP GUI Scripting zur Verfügung gestellt haben, enthielt viele Informationen zum Schreiben von Skripten, aber ich konnte nichts über den Aufruf des SAP GUI mit VBA finden. Ich gehe davon aus, dass ich das Skript nicht wortwörtlich kopieren/einfügen kann. Gibt es eine spezifische Referenzbibliothek, die ich aktivieren sollte? Muss ich Variablen wie SapGuiAuto deklarieren? –

+1

Sie sollten in der Lage sein, das Skript wörtlich zu kopieren. Das Skript verwendet die späte Bindung. Ich werde die Antwort mit Details zur frühen und späten Bindung bearbeiten. – AndASM