Top-Themen

Aktuelle Themen (A bis Z)

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, 3784 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: 116301
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: 116301
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 ..
Ähnliche Inhalte
Microsoft Office
Excel Daten aus Registerblatt übernehmen
Frage von BackgammonMicrosoft Office1 Kommentar

Hallo, habe wiedereinmal eine Frage zu Excel: Ich lege eine Datei mit 52 Registerblättern an. Ich muss jeweils Daten ...

Microsoft Office
Formular Daten in Excel importieren
gelöst Frage von hausensMicrosoft Office16 Kommentare

Guten Morgen, Ich steh vor einem Problem bei dem ich nicht weiterkomme, Hoffe jemand von euch kann mir dabei ...

VB for Applications
Excel VBA Sortierung von Daten
Frage von easy4breezyVB for Applications5 Kommentare

Hallo, ich muss in Excel Daten anhand der PLZ sortieren, vielleicht könnt ihr mir da helfen. Es müsste alles ...

Microsoft Office
"Microsoft Excel kann die Daten nicht einfügen"
Frage von arik12Microsoft Office2 Kommentare

Hallo zusammen, ich habe Excel (2010) in zwei dateien auf zwei bilschirmen offen. Wenn ich jetzt von eine Excel ...

Neue Wissensbeiträge
Windows 10

Windows 10 Hello-Anmeldung per Foto ausgehebelt

Tipp von kgborn vor 3 StundenWindows 10

Windows Hello ist eine Funktion, um sich per Fingerabdruck-, Gesichts- oder Iriserkennung bei Windows 10-Geräten anzumelden (siehe), setzt aber ...

Perl

Perl hat heute Geburtstag: 30 Jahre Perl: Lange Gesichter zum Geburtstag

Information von Penny.Cilin vor 11 StundenPerl2 Kommentare

Hallo, auch wenn es wenige wissen und noch weniger Leute es nutzen. Perl hat heute Geburtstag. 30 Jahre Perl ...

Sicherheit

Blackberry stirbt - Keine Updates für Priv mehr

Tipp von certifiedit.net vor 12 StundenSicherheit1 Kommentar

Blackberry wird zu einer 08/15 Firma und geht wohl mehr und mehr den Weg, den HTC schon ging. Von ...

Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 1012 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Heiß diskutierte Inhalte
Windows Server
SCCM 2016: PXE Boot des Clients schlägt fehl
Frage von gabeBUWindows Server23 Kommentare

Hallo Zusammen Ich habe eine Testumgebung erstellt um über SCCM 2016 einen virtuellen Client aufzusetzen. Folgende Maschinen habe ich ...

Netzwerkgrundlagen
Belibiges Teilnetz einer Subnetzmaske rausfinden?
gelöst Frage von CenuzeNetzwerkgrundlagen19 Kommentare

Wundervollen Gutentag, mittlerweile kann ich Subnetting so einigermaßen, aber ein Problem habe ich noch. Netzwerkadresse und Boradcast errechnen ist ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless12 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Exchange Server
Exchange empfängt Emails - Kann aber keine Senden
gelöst Frage von niklasschaeferExchange Server11 Kommentare

Hallo, ich stehe gerade bei mir zuhause vor folgender Problemstellung. Gegeben sind 2x Hyper-V Host mit Windows Server 2016 ...