Sub RFCReadTable()
' https://www.linkedin.com/pulse/connect-sap-r3-call-custom-fm-from-ms-excel-erkan-kopuz
' https://saplsmw.com/Import_tables_directly_into_Access_from_SAP_using_RFCs
' http://sapass.metro.client.jp/Sap_Active_X/UseFunctionControl.htm
Set oSAP = CreateObject("SAP.Functions")
oSAP.Connection.ApplicationServer = "1.1.1.1" ' IP des Appl-Servers (SM51->Details)
oSAP.Connection.SystemNumber = "01" ' Systemnummer, meißt im Namen des Appl-Servers enthalten
oSAP.Connection.System = "XA1" ' Entwicklungs-, Test-, Produktivsystem
oSAP.Connection.Client = "100" ' Mandant
oSAP.Connection.Language = "DE" ' Sprache "EN", "DE" ...
oSAP.Connection.User = "USER1" ' SAP-User
'oSAP.Connection.Password = "xyz" ' SAP-Passwort
oSAP.Connection.UseSAPLogonIni = False
' RFC-Login, wobei
' Logon(0, False): Logon-Fenster anzeigen
' Logon(0, True): Silent logon, Passwort muss gesetzt sein
If oSAP.Connection.Logon(0, False) = True Then
Dim oFuBa As Object
' FuBa RFC_READ_TABLE abfragen
Set oFuBa = oSAP.Add("RFC_READ_TABLE")
' EXPORTING
Set e_query_table = oFuBa.Exports("QUERY_TABLE")
Set e_delimiter = oFuBa.Exports("DELIMITER")
Set e_rowCount = oFuBa.Exports("ROWCOUNT")
e_query_table.Value = "STXH" ' Tabelle STXH
e_delimiter.Value = ";" ' Spalten mit ";" getrennt
e_rowCount.Value = "100" ' max. 100 Datensätze lesen, 0 = alle
' TABLES
Set t_options = oFuBa.Tables("OPTIONS")
Set t_fields = oFuBa.Tables("FIELDS")
Set t_data = oFuBa.Tables("DATA")
' WHERE-Bedingung
t_options.AppendRow
t_options(1, "TEXT") = "TDOBJECT EQ 'TEXT'"
' Welche Spalten sollen gelesen werden
t_fields.AppendRow
t_fields(1, "FIELDNAME") = "TDOBJECT"
t_fields.AppendRow
t_fields(2, "FIELDNAME") = "TDNAME"
t_fields.AppendRow
t_fields(3, "FIELDNAME") = "TDID"
t_fields.AppendRow
t_fields(4, "FIELDNAME") = "TDTITLE"
t_fields.AppendRow
t_fields(5, "FIELDNAME") = "TDLUSER"
If oFuBa.Call = True Then
' Schnittstellenparameter "TABLES-DATA" holen
' Rückgabe in Excel-Sheet einfügen
Dim iRow As Integer
iRow = 1
' Rückgabemenge beinhaltet Strings, die mit dem festgelegten Separator ";" getrennt sind
For Each oDataLine In t_data.Rows
' Spalten einer Datenzeile anhand des Separators ";" aufsplitten
Dim vFields As Variant
vFields = Split(oDataLine(1), ";")
' Inhalt der Spalten in die Zellen schreiben
For iCol = LBound(vFields) To UBound(vFields)
ActiveWorkbook.Sheets(1).Cells(iRow, iCol + 1) = Trim(vFields(iCol))
Next iCol
iRow = iRow + 1
Next
Else
' Exception?
MsgBox oFuBa.Exception
End If
' Logoff
oSAP.Connection.Logoff
Else
' Kein Login möglich
MsgBox "Login fehlgeschlagen."
End If
End Sub