SAP Daten per RFC Baustein RFC READTABLE in Excel
Hallo,
ich bin gerade wieder auf mein altes Projekt gestoßen Daten aus SAP in Excel mit dem Funktionsbaustein RFC_READ_TABLE zu schreiben. Der Aufruf und Logon soll dabei aus Excel stattfinden. Dazu hatte ich auf einer bekannten Seite vor langer Zeit Code gefunden, den ich jetzt versuche zu verstehen. Leider wirft er einen Syntaxfehler.
Deklaration
Deklarationen sind klar und verstanden.
Sub Start
Die zweifache Schleife ist mir unverständlich. Was passiert dort? UBound bestimmt lt. Hilfe für die 1. Dimension den maximalen Wert. Offenbar läuft die äußere Schleife dann über alle Daten in SMDData. Die innere Schleife macht genau das gleiche. Wird hier die volle Breite durchgegangen wegen der 2 als 2. Dimension? Heißt also es wird über alle Daten gegangen?
Zeile 17 bin ich leider ratlos. Vielleicht kann jemand helfen.
Sub Logon
Zeile 3 kann ich als Variable nirgends auffinden. Ist dies für die ganzen Zuweisungen für die Logondaten notwendig? Ansonsten funktioniert der Logon mit Eingabemaske fehlerfrei.
Sub Auslesen beliebige Tabelle
Zeile 7 - 31 sind die Parameter für den Funktionsbaustein. Hier verstehe ich das freetable für die Bereiche Fields, Options und Data nicht richitg.
Aus der Hilfe zur Split Anweisung wurde ich nicht richtig schlau. Wie funktioniert diese Anweisung und wie kann ich den Output verstehen? Ab Zeile 33 - 44 + 51 bin ich dann auch ratlos. Was macht diese doppelt verzweigte Schleife? Die mehrfachen Split Anweisungen lassen sich ja mit einmal erklären und duplizieren bzgl. dem Verständnis. In Zeile 41 kommt es dann auch zum besagten Syntaxfehler.
Wäre über jede Hilfe dankbar.
ich bin gerade wieder auf mein altes Projekt gestoßen Daten aus SAP in Excel mit dem Funktionsbaustein RFC_READ_TABLE zu schreiben. Der Aufruf und Logon soll dabei aus Excel stattfinden. Dazu hatte ich auf einer bekannten Seite vor langer Zeit Code gefunden, den ich jetzt versuche zu verstehen. Leider wirft er einen Syntaxfehler.
Deklaration
Deklarationen sind klar und verstanden.
'SAP Objekte
Public objConSMD As Object
Public objLogSMD As Object
Public objRrtSMD As Object
Public objFunSMD As Object
'RFC_READ_TABLE Objekte
Public SMDFunc As Object
Public SMDTabObj As Object
Public rtcLogSMD As Integer
Public SMDData() As String
Sub Start
Die zweifache Schleife ist mir unverständlich. Was passiert dort? UBound bestimmt lt. Hilfe für die 1. Dimension den maximalen Wert. Offenbar läuft die äußere Schleife dann über alle Daten in SMDData. Die innere Schleife macht genau das gleiche. Wird hier die volle Breite durchgegangen wegen der 2 als 2. Dimension? Heißt also es wird über alle Daten gegangen?
Zeile 17 bin ich leider ratlos. Vielleicht kann jemand helfen.
Sub Start()
Dim i As Long
Dim k As Long
Sheets(1).Select
'Sub SAPLogon
SAPLogon
If rtcLogSMD = 1 Then
'SAPLogon = True
SMDRead_Table ("T001")
For i = 0 To UBound(SMDData, 1)
For k = 0 To UBound(SMDData, 2)
Cells(i + 1, UBound(SMDData, 2) - k + 1).Value = SMDData(i, k)
Next k, i
'Sub SAPLogoff
SAPLogoff
End If
End Sub
Sub Logon
Zeile 3 kann ich als Variable nirgends auffinden. Ist dies für die ganzen Zuweisungen für die Logondaten notwendig? Ansonsten funktioniert der Logon mit Eingabemaske fehlerfrei.
Private Sub SAPLogon()
Dim lv_cell As Range
'Create Logon Control
Set objLogSMD = CreateObject("SAP.Logoncontrol.1")
'Get Connection Object
Set objConSMD = objLogSMD.NewConnection
'Set Logon Parameters
'Set Systen Parameters
objConSMD.System = Range("Zugangsdaten!B1").Value2
objConSMD.ApplicationServer = Range("Zugangsdaten!B2").Value2
objConSMD.SystemNumber = Range("Zugangsdaten!B3").Value2
'Set User Data
objConSMD.Client = Range("Zugangsdaten!B4").Value2
objConSMD.User = Range("Zugangsdaten!B5").Value2
'objConSMD.Password = ""
objConSMD.Language = Range("Zugangsdaten!B6").Value2
'Set SNC Data
objConSMD.SNC = True
objConSMD.SNCName = Range("Zugangsdaten!B7").Value2
objConSMD.SNCQuality = 3
'Open SAP Connection
If objConSMD.Logon(0, False) = False Then
MsgBox Range("Zugangsdaten!B1").Value2 + " Verbindungsfehler"
rtcLogSMD = 0
Exit Sub
End If
rtcLogSMD = 1
Set objFunSMD = CreateObject("SAP.Functions")
'Log on to the R/3 System.
Set objFunSMD.Connection = objConSMD
Set SMDFunc = objFunSMD.Add("RFC_READ_TABLE")
End Sub
Sub Auslesen beliebige Tabelle
Zeile 7 - 31 sind die Parameter für den Funktionsbaustein. Hier verstehe ich das freetable für die Bereiche Fields, Options und Data nicht richitg.
Aus der Hilfe zur Split Anweisung wurde ich nicht richtig schlau. Wie funktioniert diese Anweisung und wie kann ich den Output verstehen? Ab Zeile 33 - 44 + 51 bin ich dann auch ratlos. Was macht diese doppelt verzweigte Schleife? Die mehrfachen Split Anweisungen lassen sich ja mit einmal erklären und duplizieren bzgl. dem Verständnis. In Zeile 41 kommt es dann auch zum besagten Syntaxfehler.
Sub SMDRead_Table(Table As String)
Dim T() As String
Dim i As Long
Dim k As Long
SMDFunc.Exports("DELIMITER") = vbTab
'SMDFunc.Exports("NO_DATA") = "X"
SMDFunc.Exports("QUERY_TABLE") = Table
SMDFunc.Exports("ROWCOUNT") = "500"
'******** Create Table Object ************
Set SMDTabObj = SMDFunc.Tables("FIELDS")
SMDTabObj.freetable
'SMDTabObj.appendrow
'SMDTabObj.appendrow
'SMDTabObj.cell(1, 1) = "CHECKTABLE"
'SMDTabObj.cell(2, 1) = "KEYFLAG"
'******** Create Table Object ************
Set SMDTabObj = SMDFunc.Tables("OPTIONS")
SMDTabObj.freetable
'SMDTabObj.appendrow
'SMDTabObj.cell(1, 1) = "TABNAME EQ '" & Tab_Nam & "' AND LENG NE 0"
'******** Create Table Object ************
Set SMDTabObj = SMDFunc.Tables("DATA")
SMDTabObj.freetable
If SMDFunc.Call = True Then
'******** Read Result ************
T = Split(SMDTabObj.Cell(1, 1), vbTab)
ReDim SMDData(SMDTabObj.Rows.Count, UBound(T))
k = 0
For Each Element In SMDTabObj.Rows
T = Split(Element("WA"), vbTab)
For i = 0 To UBound(T)
SMDData(k, UBound(T) - i) = T(i)
Next i
k = k + 1
Next Element
Else
MsgBox SMDFunc.Exception
End If
'*** ohne Mandant
ReDim Preserve SMDData(SMDTabObj.Rows.Count, UBound(T) - 1)
End Sub
Wäre über jede Hilfe dankbar.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 259811
Url: https://administrator.de/forum/sap-daten-per-rfc-baustein-rfc-readtable-in-excel-259811.html
Ausgedruckt am: 23.12.2024 um 05:12 Uhr
3 Kommentare
Neuester Kommentar
Hallo 3xplor3r!
Zeile 15 bis 18 wohl eher so:
Grüße Dieter
Zeile 15 bis 18 wohl eher so:
For i = 0 To UBound(SMDData, 1)
For k = 0 To UBound(SMDData, 2)
Cells(i + 1, k + 1).Value = SMDData(i, k)
Next
Next
Grüße Dieter
Hallo 3xplor3r!
Die zweite Schleife sollte so gehen:
Zur Erklärung:
In beiden Fällen sind 2 Schleifen erforderlich, wobei die äußere Schleife die Rows (Zeilen) und die innere jeweils die Columns (Spalten) durchläuft.
Im vorherigen Kommentar hast Du ein 2-Dimensionales Datenfeld, dabei steht UBound(SMDData, 1) für die Anzahl der Rows (Dimension 1) und UBound(SMDData, 2) für die Anzahl der Columns (Dimension 2). Wobei im Datenfeld SMDData die Rows/Columns jeweils bei 0 beginnen und beim Übertragen in die Zellen immer 1 dazu addiert werden muss, da es in Excel keine Zeile(0) und Spalte(0) gibt.
In diesem Beispiel gehen die Rows von 0-5 (Dimension 1) und die Columns von 0-8 (Dimension 2):
Grüße Dieter
Die zweite Schleife sollte so gehen:
For Each Element In SMDTabObj.Rows
T = Split(Element("WA"), vbTab)
For i = 0 To UBound(T)
SMDData(k, i) = T(i)
Next
k = k + 1
Next
Zur Erklärung:
In beiden Fällen sind 2 Schleifen erforderlich, wobei die äußere Schleife die Rows (Zeilen) und die innere jeweils die Columns (Spalten) durchläuft.
Im vorherigen Kommentar hast Du ein 2-Dimensionales Datenfeld, dabei steht UBound(SMDData, 1) für die Anzahl der Rows (Dimension 1) und UBound(SMDData, 2) für die Anzahl der Columns (Dimension 2). Wobei im Datenfeld SMDData die Rows/Columns jeweils bei 0 beginnen und beim Übertragen in die Zellen immer 1 dazu addiert werden muss, da es in Excel keine Zeile(0) und Spalte(0) gibt.
In diesem Beispiel gehen die Rows von 0-5 (Dimension 1) und die Columns von 0-8 (Dimension 2):
Grüße Dieter