Office: (Office 2010) SAP-Tabelle mit VBA auslesen und Werte exportieren

Helfe beim Thema SAP-Tabelle mit VBA auslesen und Werte exportieren in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, es gibt zwar schon ein paar Themen hier dazu, allerdings finde ich keines, welches mir hier weiterhilft... es geht um Folgendes: Ich... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von leMoi66, 23. August 2017.

  1. SAP-Tabelle mit VBA auslesen und Werte exportieren


    Hallo zusammen,

    es gibt zwar schon ein paar Themen hier dazu, allerdings finde ich keines, welches mir hier weiterhilft...

    es geht um Folgendes:
    Ich habe ein Excel Template, welches in SAP CO eingebettet ist.
    Mittels dieses Templates kann ich Plankostenrechnungen für bestimmte Projekte mit unterschiedlichen Stundensätzen automatisch berechnen lassen.

    Nun ist es so, dass sich die Stundensätze alle 3-6 Monate ändern. Diese Änderungen werden in einer SAP-Tabelle hinterlegt. Das heißt, dass ich die Stundensätze in meinem VBA Code nicht "hard" coden kann. Besser ist es also,bevor die Plankostenrechnung durchgeführt wird, jene SAP-Tabelle mittels meines VBA Codes ausgelesen wird. Die jeweilige Plankostenberechnung soll sodann mit den aus der SAP-Kostentabelle ausgelesenen Stundensätzen durchgeführt werden.
    Zum Auslesen von SAP-Tabellen stellt SAP BAPI-Funktionsbausteine zur Verfügung. Die hierfür benötigte BAPI lautet: BAPI_CTR_GETACTIVITYPRICES.

    Nun habe ich den VBA Code zum SAP-Tabellen-Auslesen geschrieben:
    Die SAP-Tabelle soll ausgelesen werden und in ein separates Excel-Tabellenblatt eingefügt werden, woraus sie den jeweiligen Berechnungsvariablen zugeordnet werden.

    Mein Problem momentan ist, dass wenn ich über die Konsole ausgeben lasse, wie viele Zeilen die ausgelesen Tabelle hat, "0" angezeigt. Wenn ich über die Konsole ausgeben lasse, wie viele Spalten die SAP-Tabelle hat, erscheint "14". Was mit dem übereinstimmt, was in der SAP Doku dokumentiert ist. Meines Erachtens wird hier schon erkannt, dass es diese SAP-Tabelle gibt, allerdings wird sie nicht ausgelesen.

    Sieht jemand zufällig meinen Fehler? Kann mir dann zufällig jemand helfen?
    Das wäre meega!

    Vielen Dank schon einmal im Voraus!

    Und nun der Code:


    Function GetActivityPrices()
    '
    'Declaration
    '
    Dim Destination_System As Integer
    Dim objBAPIControl As Object 'Function Control (Collective object)
    Dim sapConnection As Object 'Connection object
    Dim ws As Worksheet 'Tarife

    'separates Excel-Tabellenblatt, in welches die SAP Tabelle exportiert werden soll
    Set ws = Excel.Worksheets("Tarife")

    'Verbindung mit SAP vorbereiten
    '
    Set objBAPIControl = CreateObject("SAP.Functions")
    Set sapConnection = objBAPIControl.Connection

    'Prüft ob Connection erfolgreich --> gewünschtes SAP System kann hier manuell ausgewählt werden
    '
    If sapConnection.Logon(1, False) True Then
    MsgBox "No connection to R/3!"
    Exit Function 'End program
    '
    Else
    MsgBox "Connection succeeded!"
    End If

    Set objTarifList = objBAPIControl.Add("BAPI_CTR_GETACTIVITYPRICES")

    'Vorbereitung des Exports nach Excel --> hier werden im separaten Excel-Tabellenblatt die Spalten benannt
    '
    ws.Cells.Clear
    ws.Range("A1:N1").Font.Bold = True
    ws.Cells(1, 1) = "Kostenstelle"
    ws.Cells(1, 2) = "Leistungsart"
    ws.Cells(1, 3) = "Periode"
    ws.Cells(1, 4) = "Tarifkennzeichen"
    ws.Cells(1, 5) = "Tarif fix Curr"
    ws.Cells(1, 6) = "Tarif variabel Curr"
    ws.Cells(1, 7) = "Tarifeinheit Curr"
    ws.Cells(1, 8) = "Währungsschlüssel"
    ws.Cells(1, 9) = "Währungsschlüssel (ISO)"
    ws.Cells(1, 10) = "Tarif fix Objekt-Curr"
    ws.Cells(1, 11) = "Tarif variabel Objekt-Curr"
    ws.Cells(1, 12) = "Tarifeinheit Curr"
    ws.Cells(1, 13) = "Währungsschlüssel Objekt"
    ws.Cells(1, 14) = "Währungsschlüssel Objekt (ISO)"


    'Definiert die Import-Parameter für BAPI_CTR_GETACTIVITYPRICES
    '
    objTarifList.exports("COAREA") = "1000"
    objTarifList.exports("FISCYEAR") = "2016" 'Jahr
    objTarifList.exports("VERSION") = "0"
    objTarifList.exports("COSTCENTERFROM") = "11110"
    objTarifList.exports("COSTCENTERTO") = ""
    objTarifList.exports("COSTCENTERGRP") = ""
    objTarifList.exports("ACTTYPEFROM") = "110"
    objTarifList.exports("ACTTYPETO") = ""
    objTarifList.exports("PERIODFROM") = "8" 'AktuellerMonat
    objTarifList.exports("PERIODTO") = "8" 'AktuellerMonat

    'Aufruf der BAPI um Liste mit Tarifen zu erhalten
    '
    returnFunc = objTarifList.Call
    Dim objTable As Object
    Set objTable = objTarifList.Tables("ACTPRICES")
    Debug.Print "Tarife: " & objTable.RowCount 'gibt aktuell 0 aus

    If returnFunc = True Then

    For i = 1 To objTable.RowCount

    'Zeilenfarben für bessere Übersicht beim Lesen
    '
    If i Mod 2 = 0 Then
    For j = 1 To objTable.ColumnCount
    ws.Cells(i, j).Interior.Color = RGB(165, 162, 165)
    Next j
    Else
    For j = 1 To objTable.ColumnCount
    ws.Cells(i + i, j).Interior.Color = RGB(214, 211, 206)
    Next j
    End If

    For x = 1 To objTable.ColumnCount
    ws.Cells(i + 1, x) = objTable.cell(i, x)
    Next x

    Next i

    Else
    MsgBox "Error when accessing BAPI_CTR_GETACTIVITYPRICES"
    Exit Function

    End If

    ' Schließe Verbindung to R/3 !
    '
    objBAPIControl.Connection.Logoff
    '
    ' Speicherzuordnung löschen
    '
    Set sapConnection = Nothing
    Set functionCtrl = Nothing

    If objTable.RowCount = 0 Then
    MsgBox "Es wurden keine Tarife gefunden."
    ElseIf objTable.RowCount = 1 Then
    MsgBox "Es wurde " & objTable.RowCount & " Tarif gefunden."
    Else
    MsgBox "Es wurden " & " Tarife gefunden."
    End If

    End Function

    :)
     
    leMoi66, 23. August 2017
    #1
  2. Hajo_Zi
    Hajo_Zi Erfahrener User
    SAP-Tabelle mit VBA auslesen und Werte exportieren logo_hajo3.gif
     
    Hajo_Zi, 25. August 2017
    #2
  3. Hallo,

    generell für das Auslesen von SAP-Tabellen aus Excel oder auch per RFC (Remote Function Call) avon einem anderem System, gibt es den Funktionsbaustein RFC_READ_TABLE.

    Dazu habe ich auch funktionierendes Beispiel gefunden.

    www.*************************125374_0_0_asc.php - Link funktioniert nicht!

    Die Sterne müssen durch: Office - loesung . de ohne Leerzeichen ersetzt werden.


    Dim FUBAU_rfc_read_table As Object
    Dim functionCtrl As Object
    Dim T_I_Options As Object
    Dim T_I_Fields As Object
    Dim T_E_Data As Object

    Dim i, x As Integer
    Dim strDataRow As String
    Dim DataRow As Variant
    Dim Col As Boolean
    Col = False

    Set functionCtrl = CreateObject("SAP.Functions")

    Set FUBAU_rfc_read_table = functionCtrl.Add("RFC_READ_TABLE")
    With FUBAU_rfc_read_table
    .exports("QUERY_TABLE") = InputBox("Bitte Tabellenname eingeben")
    .exports("DELIMITER") = "|" 'Delimiter
    End With

    Set T_I_Options = FUBAU_rfc_read_table.tables("OPTIONS")
    Set T_I_Fields = FUBAU_rfc_read_table.tables("FIELDS")
    Set T_E_Data = FUBAU_rfc_read_table.tables("DATA")

    'Aufruf des FUBAs
    ret = FUBAU_rfc_read_table.call

    'Übetragen der Daten in Excel-Tabelle (z.B. immer in Tabelle1)
    If T_E_Data.RowCount > 0 And ret = True Then

    For i = 1 To T_E_Data.RowCount
    strDataRow = T_E_Data(i, 1)
    DataRow = Split(strDataRow, "|")

    'Spaltenüberschriften an Excel übergeben
    If Col = False Then
    For x = 0 To UBound(DataRow)
    ' Tabelle1.Cells(1, x + 1).Value = T_I_Fields(x + 1, 1)
    Sheet1.Cells(1, x + 1).Value = T_I_Fields(x + 1, 1)
    Next x
    Col = True
    End If

    For x = 0 To UBound(DataRow)
    Sheet1.Cells(i + 1, x + 1).Value = DataRow(x)
    Next x
    Next i
    End If

    End Sub

    Beim testen bin ich auf folgende Probleme gestoßen.

    Die Breite aller Felder darf den Wert von 512 nicht übersteigen.

    Bei Charakterfeldern, die einen numerischen Inhalt haben, werden die führenden Nullen abgeschnitten, da Excel diese in Zahlen umwandelt.

    Somit wird aus Mandant 001 und Buchungskreis 0001 jeweils nur eine 1.

    Wie sich dieses Problem beheben lässt, dazu habe ich im Moment keine Idee
    (Per Makro nach dem Import nacharbeiten, kann eine Workaround sein).

    Grundsätzlich kann dem Funktionsbaustein beim Aufruf wohl auch mitgebeben werden, welche Felder überhaupt geleifert werden sollen und auch die Selektionsoptionen können mitgegeben werden.

    Bisher habe ich aber noch keine Idee, wie ich die Übergabestrukturen füllen muss.

    Der Import einer Tabelle mit 27.000 Datensätzen hat bei mir etwa 1 Minute gedauert.

    Wenn du beim Ersten Mal, das ausgewählte SAP-System als Default einstellst, musst du es nicht jedes Mal auswählen, aber bei Bedarf immer ändern.
     
  4. SAP-Tabelle mit VBA auslesen und Werte exportieren

    Wenn der Aufruf des BAPI generell funktioniert, aber keine Ergebnisse liefert,
    dann stimmt was nicht mit den Abfrage-Kriterien.

    Eine Vermutung wäre:
    Die Monate sind als Text in SAP zweistellig.
    Versuch mal "08" statt "8"

    Ich kenne solche Probleme beim Auslesen von Aufträgen
    Ein Auftrag mit der Nummer 123456 muss man mit "0000123456" (10-stellig) übergeben
     
    Scorefun, 26. August 2017
    #4
  5. Hi Scorefun,

    danke für deine Rückmeldung,

    das ist in der Tat ein guter Hinweis - bisher noch nicht beachtet.

    Ich habe das nun versucht bei allen Eingaben in SAP durchzuführen. Vorher habe ich nach den von SAP definierten Feldlängen der Import-Eingaben gesucht. Hier wurde für die Periode '3'Stellen definiert.
    Als ich versucht habe '008' einzugeben, hat mein VBA Editor daraus automatisch '8' geschrieben.

    Hast du oder ihr eine Idee, wie man das umgehen bzw. unterlassen kann?
     
  6. Wenn Du die 008 in Gänsefüsschen setzt, glaube ich nicht, daß da 'ne 8 draus wird

    edit:
    Oder gehst Du über eine Variable, die Du aus einer Excel-Zelle holst? Dann muss diese als String deklariert und entsprechend aufbereitet werden

    Code:
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
    Scorefun, 6. September 2017
    #6
  7. Hallo Ralf,

    was die Abfrage angeht da hast du mit deinen Hinweisen Recht. In den SAP-Eingabemasken muss dies nicht beachtet werden, weil da die Konvertierungsregeln automatisch ablaufen.

    Das von mir geschilderte Problem betrifft aber die empfangenen Daten, die von Excel automatisch konvertiert werden. Wenn dabei dann aus der Periode 008 eine 8 wird, ist dies kein Problem, aber wenn die Postleitzahl 01234, nach dem Import als Zahl mit 1234 dargestellt wird, dann ist es halt falsch.
     
  8. SAP-Tabelle mit VBA auslesen und Werte exportieren

    Damit hast Du die Ursache doch schon beschrieben. Excel konvertiert!!!
     
  9. Sehe ich genauso wie Storax - für die korrekte Verarbeitung und Darstellung der empfangenen Daten in Deiner Anwendung solltest Du sorgen, und dies nicht Excel überlassen *wink.gif*

    Ein Hochkomma vor vermeintliche Zahlen wirkt da schon Wunder

    Code:
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
    Scorefun, 6. September 2017
    #9
  10. das habe ich versucht. Ebenso habe ich geprüft, ob die Feldlängen auch tatsächlich mit denen übereinstimmen, die SAP definiert hat. Trotzdem erscheint bei der Abfrage von "RowCount" der Wert "0" (null).

    - die SAP Verbindung klappt
    - die Rechte für den Zugriff sind vorhanden
    - die erforderlichen Parameter gebe ich mit
    - bei Abfrage der der Spaltenanzahl erscheint die 14, bedeutet die Tabelle wurde erkannt
    - wenn ich die SAP Tabelle manuell abfragen, erscheinen auch die erforderlichen Daten

    Habt ihr sonst eine Idee, was ich nicht beachtet haben könnte?


    Vielen Dank schon einmal !!

    BEste Grüße
    leMoi66
     
  11. Mein Tipp, debuggen, und zwar wie folgt
    Code:
    Bei Code:
    einen Breakpunkt setzen, dann sollte in RETURN stehen, was da falsch läuft. Ich kriege z.B. die korrekte Meldung
    .
     
  12. Vielen Dank! Das hat mich zur Lösung gebracht.

    Für die Leistungsart wirdin der SAP Doku eine Feldlänge von 6 Stellen vorgegeben -> Also statt "110", "000110".

    Wie sich herausgestellt hat, sind es in diesem Fall nur 3 Stellen.

    Vielen Dank!
     
  13. SAP-Tabelle mit VBA auslesen und Werte exportieren

    Das schrieb ich doch schon in #4 mit den Feldlängen...
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
  14. Absolut!

    Nur habe ich nicht herausgefunden, was genau nicht stimmte (und bin nicht davon ausgegangen, dass die SAP Doku falsch ist :-D )
     
Thema:

SAP-Tabelle mit VBA auslesen und Werte exportieren

Die Seite wird geladen...
  1. SAP-Tabelle mit VBA auslesen und Werte exportieren - Similar Threads - SAP Tabelle VBA

  2. Werte aus einer Anderen Mappe mit bedingung einfügen

    in Microsoft Excel Hilfe
    Werte aus einer Anderen Mappe mit bedingung einfügen: Hallo, Ich habe folgendes Problem, Ich habe zwei Mappen, die eine wird von SAP mit Preisen gefüttert und die Andere ist eine Materialliste die zur besseren übersicht in Unserer Abteilung dient....
  3. Mit VBA über RFC Funktionsbaustein Daten aus SAP exportieren

    in Microsoft Excel Hilfe
    Mit VBA über RFC Funktionsbaustein Daten aus SAP exportieren: Hallo zusammen, *winken ich bin Azubi als Fachinformatiker im dritten Lehrjahr und im Zuge meiner Ausbildung muss ich ein Abschlussprojekt erstellen. Mein Abschlussprojekt ist mit Excel ein...
  4. SAP GUI Scripting

    in Microsoft Excel Hilfe
    SAP GUI Scripting: Servus zusammen, ich möchte über VBA ein SAP GUI Script steuern, welches ein spezifisches Layout anhand des Namens auf eine Transaktion anwendet. Dazu möchte ich während die Layoutwahl geöffnet...
  5. automatische Pivot Aktualisierung mit SAP BW-Daten

    in Microsoft Excel Hilfe
    automatische Pivot Aktualisierung mit SAP BW-Daten: Hallo, ich stehe gerade vor einem Problem, was ich ohne Hilfe nicht lösen kann. Wir arbeiten mit SAP Analysis for Microsoft Excel. Damit werden Daten aus SAP BW (Hana) ausgelesen. Dazu habe ich...
  6. SAP über Excel Makro ansteuern

    in Microsoft Excel Hilfe
    SAP über Excel Makro ansteuern: Hallo, ich möchte gern über ein Excel Makro eine SAP Transaktion aufrufen und nach ein paar Angaben ausführen. Ich habe es mit dem SAP Recorder probiert und dann denn Quellcode in Excel überführt...
  7. SAP Transaktion m. Zeichnung aufrufen

    in Microsoft Excel Hilfe
    SAP Transaktion m. Zeichnung aufrufen: Guten Morgen in die Runde, vllt könnt ihr mir mal wieder helfen! Generell erst mal die Frage, ob mein Anliegen überhaupt funktioniert? Ich habe eine Excel-Tabelle mit Art.Nr.(untereinander...
  8. Excel-Daten an das SAP übertragen (mit VBA)

    in Microsoft Excel Hilfe
    Excel-Daten an das SAP übertragen (mit VBA): Hallo zusammen, ich habe folgendes Problem. Ziel ist, in einem Excel-File einen Bereich zu markieren und dann die Werte automatisch ins SAP zu übertragen. Die Speicherung der einzelnen Werte in...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden