Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

SAP Daten per RFC Baustein RFC READTABLE in Excel

Frage Entwicklung

Mitglied: 3xplor3r

3xplor3r (Level 1) - Jetzt verbinden

14.01.2015, aktualisiert 15.01.2015, 2825 Aufrufe, 3 Kommentare

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.
01.
'SAP Objekte 
02.
Public objConSMD As Object 
03.
Public objLogSMD As Object 
04.
Public objRrtSMD As Object 
05.
Public objFunSMD As Object 
06.
  
07.
'RFC_READ_TABLE Objekte 
08.
Public SMDFunc As Object 
09.
Public SMDTabObj As Object 
10.
Public rtcLogSMD As Integer 
11.
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.
01.
Sub Start() 
02.
  
03.
Dim i As Long 
04.
Dim k As Long 
05.
  
06.
Sheets(1).Select 
07.
  
08.
'Sub SAPLogon 
09.
SAPLogon 
10.
  
11.
If rtcLogSMD = 1 Then 
12.
    'SAPLogon = True 
13.
    SMDRead_Table ("T001"
14.
  
15.
    For i = 0 To UBound(SMDData, 1) 
16.
        For k = 0 To UBound(SMDData, 2) 
17.
            Cells(i + 1, UBound(SMDData, 2) - k + 1).Value = SMDData(i, k) 
18.
    Next k, i 
19.
  
20.
    'Sub SAPLogoff 
21.
    SAPLogoff 
22.
End If 
23.
  
24.
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.
01.
Private Sub SAPLogon() 
02.
  
03.
    Dim lv_cell As Range 
04.
  
05.
    'Create Logon Control 
06.
    Set objLogSMD = CreateObject("SAP.Logoncontrol.1"
07.
    'Get Connection Object 
08.
    Set objConSMD = objLogSMD.NewConnection 
09.
    'Set Logon Parameters 
10.
    'Set Systen Parameters 
11.
    objConSMD.System = Range("Zugangsdaten!B1").Value2 
12.
    objConSMD.ApplicationServer = Range("Zugangsdaten!B2").Value2 
13.
    objConSMD.SystemNumber = Range("Zugangsdaten!B3").Value2 
14.
    'Set User Data 
15.
    objConSMD.Client = Range("Zugangsdaten!B4").Value2 
16.
    objConSMD.User = Range("Zugangsdaten!B5").Value2 
17.
    'objConSMD.Password = "" 
18.
    objConSMD.Language = Range("Zugangsdaten!B6").Value2 
19.
    'Set SNC Data 
20.
    objConSMD.SNC = True 
21.
    objConSMD.SNCName = Range("Zugangsdaten!B7").Value2 
22.
    objConSMD.SNCQuality = 3 
23.
  
24.
    'Open SAP Connection 
25.
    If objConSMD.Logon(0, False) = False Then 
26.
        MsgBox Range("Zugangsdaten!B1").Value2 + " Verbindungsfehler" 
27.
        rtcLogSMD = 0 
28.
    Exit Sub 
29.
    End If 
30.
  
31.
    rtcLogSMD = 1 
32.
    Set objFunSMD = CreateObject("SAP.Functions"
33.
    'Log on to the R/3 System. 
34.
    Set objFunSMD.Connection = objConSMD 
35.
    Set SMDFunc = objFunSMD.Add("RFC_READ_TABLE"
36.
  
37.
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.
01.
Sub SMDRead_Table(Table As String) 
02.
  
03.
Dim T() As String 
04.
Dim i As Long 
05.
Dim k As Long 
06.
  
07.
SMDFunc.Exports("DELIMITER") = vbTab 
08.
'SMDFunc.Exports("NO_DATA") = "X" 
09.
SMDFunc.Exports("QUERY_TABLE") = Table 
10.
SMDFunc.Exports("ROWCOUNT") = "500" 
11.
  
12.
'******** Create Table Object ************ 
13.
Set SMDTabObj = SMDFunc.Tables("FIELDS"
14.
SMDTabObj.freetable 
15.
  
16.
'SMDTabObj.appendrow 
17.
'SMDTabObj.appendrow 
18.
'SMDTabObj.cell(1, 1) = "CHECKTABLE" 
19.
'SMDTabObj.cell(2, 1) = "KEYFLAG" 
20.
  
21.
'******** Create Table Object ************ 
22.
Set SMDTabObj = SMDFunc.Tables("OPTIONS"
23.
SMDTabObj.freetable 
24.
'SMDTabObj.appendrow 
25.
'SMDTabObj.cell(1, 1) = "TABNAME EQ '" & Tab_Nam & "' AND LENG NE 0" 
26.
  
27.
'******** Create Table Object ************ 
28.
Set SMDTabObj = SMDFunc.Tables("DATA"
29.
SMDTabObj.freetable 
30.
  
31.
If SMDFunc.Call = True Then 
32.
'******** Read Result ************ 
33.
T = Split(SMDTabObj.Cell(1, 1), vbTab) 
34.
  
35.
ReDim SMDData(SMDTabObj.Rows.Count, UBound(T)) 
36.
  
37.
k = 0 
38.
For Each Element In SMDTabObj.Rows 
39.
    T = Split(Element("WA"), vbTab) 
40.
    For i = 0 To UBound(T) 
41.
        SMDData(k, UBound(T) - i) = T(i) 
42.
    Next i 
43.
    k = k + 1 
44.
Next Element 
45.
  
46.
Else 
47.
    MsgBox SMDFunc.Exception 
48.
End If 
49.
  
50.
'*** ohne Mandant 
51.
ReDim Preserve SMDData(SMDTabObj.Rows.Count, UBound(T) - 1) 
52.
  
53.
End Sub
Wäre über jede Hilfe dankbar.
Mitglied: Eintagsfliege
LÖSUNG 14.01.2015, aktualisiert 15.01.2015
Hallo 3xplor3r!

Zeile 15 bis 18 wohl eher so:
01.
    For i = 0 To UBound(SMDData, 1) 
02.
        For k = 0 To UBound(SMDData, 2) 
03.
            Cells(i + 1, k + 1).Value = SMDData(i, k)  
04.
        Next  
05.
    Next
Grüße Dieter
Bitte warten ..
Mitglied: 3xplor3r
15.01.2015 um 12:29 Uhr
Hallo Dieter,

kannst du mir auch sagen, was ich da jetzt geändert habe? Deine Lösung behebt den aktuellen Syntaxfehler, aber ich versuche natürlich auch zu verstehen, was da passiert ist.

Desweiteren erscheint jetzt der gleiche Fehler in der zweiten Schleife, also oben im letzten Code Block Zeile 41.
Bitte warten ..
Mitglied: Eintagsfliege
16.01.2015 um 00:27 Uhr
Hallo 3xplor3r!

Die zweite Schleife sollte so gehen:
01.
For Each Element In SMDTabObj.Rows 
02.
    T = Split(Element("WA"), vbTab) 
03.
    For i = 0 To UBound(T) 
04.
        SMDData(k, i) = T(i) 
05.
    Next 
06.
    k = k + 1 
07.
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):711061b54c0bc86946e1b080164b2c4c - Klicke auf das Bild, um es zu vergrößern

Grüße Dieter
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
gelöst Aus Outlook 2013 Daten aus Tabellenfeldern in Excel übertragen (9)

Frage von ich2110 zum Thema Microsoft Office ...

VB for Applications
Excel VBA Sortierung von Daten (5)

Frage von easy4breezy zum Thema VB for Applications ...

VB for Applications
Bestimmte Daten aus eine CSV-Datei in eine Excel-Tabelle importieren (2)

Frage von MariaElena zum Thema VB for Applications ...

Microsoft Office
Excel 2010 - Microsoft Excel kann die Daten nicht kopieren (4)

Frage von EDV-Oellerking zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...