Thema Datum  Von Nutzer Rating
Antwort
15.06.2021 14:30:14 Basti
NotSolved
15.06.2021 14:56:04 Gast16801
NotSolved
15.06.2021 15:12:36 Basti
NotSolved
15.06.2021 16:40:43 Ulrich
*****
NotSolved
16.06.2021 11:25:33 Basti
NotSolved
17.06.2021 15:22:17 Ulrich
*****
NotSolved
18.06.2021 10:52:52 Basti
NotSolved
20.06.2021 12:31:06 Ulrich
NotSolved
19.06.2021 21:12:18 Gast69704
NotSolved
18.06.2021 19:58:32 Zwenn
NotSolved
Rot Korrektur
18.06.2021 20:31:42 Zwenn
NotSolved
20.06.2021 19:55:16 Ulrich
NotSolved
20.06.2021 20:27:26 Ulrich
NotSolved
20.06.2021 20:27:28 Ulrich
NotSolved
21.06.2021 08:28:20 Basti
NotSolved
21.06.2021 14:44:33 Gast36288
NotSolved

Ansicht des Beitrags:
Von:
Zwenn
Datum:
18.06.2021 20:31:42
Views:
495
Rating: Antwort:
  Ja
Thema:
Korrektur

Wow,

und ich schreibe noch "jedes Datenfeld bekommt einen Index", nur um dan zu denken, ich hätte "For Each" angewendet. Hier das korrigierte Makro auf Basis von Ubound:

Sub ImportWithAdoStream()

Dim delimiter As String             'Das Trennzeichen der einzulesenden CSV Datei
Dim importPath As String            'Der Pfad, in dem die Datei zum Importieren liegt
Dim importFileName As String        'Der Datzeiname inklusive Punkt und Dateiendung
Dim objStream As Object             'Der Kern dieses Makros: Late Binding Object Variable für den ADO-Stream
Dim lineOfTextFile As String        'Nimmt jede Zeile der Textdatei aus importPath und importFileName für die sofortige Verarbeitung auf
Dim splitLineOfTextFile() As String 'Array zur Aufnahem der Datenfelder einer eingelesenen Zeile aus der angegebenen Textdatei
Dim currRow As Long                 'Aktuelle Zeile in der zu beschrreibenden Excel-Tabelle
Dim currCol As Long                 'Aktuelle Spalte in der zu beschrreibenden Excel-Tabelle
Dim textItem As Long                'Jedes Datenfeld aus jeder gesplitteten Zeile erhält in einer Schleife hiermit einen Index zur weiteren Verarbeitung

  delimiter = Chr(9)                                  'Das Trennzeichen der CSV Datei. 9 ist der Code für Tabstop
  currRow = 1                                         'Die eingelesenen Daten werden ab Zeile 1 in die Excel-Tabelle eingetragen
  currCol = 1                                         'Die eingelesenen Daten werden ab Spalte 1 in die Excel-Tabelle eingetragen
  importPath = "Laufwerksbuchstabe:\Pfad zur Datei\"  'Der Pfad muss mit einem Backslash abgeschlossen sein (\)
  importFileName = "Dateiname.xxx"                    'Dateiname mit Punkt und Erweiterung
  
  'ADO Stream initialisieren
  Set objStream = CreateObject("ADODB.Stream") 'Objekt via late binding erzeugen (kein Einbinden einer Bibliothek über einen Verweis notwendig aber kein IntelliSense)
  objStream.Charset = "utf-8" 'Voreingestellter Zeichensatz = Unicode (bei weglassen dieser Zeile) UTF-8 ist mit den ersten 127 ASCII Zeichen identisch, die ersten 256 mit ISO 8859-1 (Latin 1)
  objStream.Type = 2 'Art der einzulesenden Datei: 2 = Text, 1 = Binär
  objStream.LineSeparator = -1 'Zeilenendezeichen: -1 = adCrLf (voreingestellt), 13 = adCr (nur carriage return), 10 = adLf (nur line feed), Letzte 2 Nummern sind die Kodierungen im Zeichensatz
  objStream.Open 'Öffnet den Stream (quasi die Datei)
  objStream.LoadFromFile importPath & importFileName 'Datei wird geladen von oben festgelegtem Pfad mit Backslash am Ende (\) und dem oben angegebenen Dateinamen inklusive Punkt und Dateiendung
  
  Do Until objStream.EOS 'Bis zum Ende des Streams
    lineOfTextFile = objStream.ReadText(-2) 'Zeilenweises Einlesen der Datei in der Schleife (-2 = zeilenweise, -1 = ganze Datei auf einmal, dann braucht man keine Schleife)
    '*********************************************************************************************************************************************************************************************
    'Innerhalb der Sternchen folgt Dein individueller Wunsch der Verarbeitung aller Zeilen (Deinem Makro entnommen)
    'Der ganze Rest funktioniert für jede zeilenweise zu verabeitende Textdatei gleich
    'Natürlich müssen die Werte der Variablen angepasst werden. z.B. der Zeichensatz (hier UTF-8, aber für vieles heutzutage wahrscheinlich passend)
    '
    'Aktuell eingelesene Zeile am oben angegebenen Delimiter splitten
    splitLineOfTextFile = Split(lineOfTextFile, delimiter)
    '
    'Gesplittete Datenfelder aus aktuell eingelesener Zeile in die Excel Tabelle schreiben
    For textItem = 0 To UBound(splitLineOfTextFile)
      'Die Daten werden in die Excel-Tabelle eingetragen, aus der das Makro aufgerufen wurde
      Cells(currRow, currCol) = splitLineOfTextFile(textItem)
      currCol = currCol + 1
    Next textItem
    currCol = 1           'Spalte für nächste Zeile auf 1 zurücksetzen
    currRow = currRow + 1 'Zeilennummer für die nächste eingelesene Textzeile festlegen
    '*********************************************************************************************************************************************************************************************
  Loop 'Nächste Zeile bis EOS erreicht wurde
  
  objStream.Close 'Schließen des Streams (qusi das Schließen der Datei)
End Sub

Viele Grüße,

Zwenn


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
15.06.2021 14:30:14 Basti
NotSolved
15.06.2021 14:56:04 Gast16801
NotSolved
15.06.2021 15:12:36 Basti
NotSolved
15.06.2021 16:40:43 Ulrich
*****
NotSolved
16.06.2021 11:25:33 Basti
NotSolved
17.06.2021 15:22:17 Ulrich
*****
NotSolved
18.06.2021 10:52:52 Basti
NotSolved
20.06.2021 12:31:06 Ulrich
NotSolved
19.06.2021 21:12:18 Gast69704
NotSolved
18.06.2021 19:58:32 Zwenn
NotSolved
Rot Korrektur
18.06.2021 20:31:42 Zwenn
NotSolved
20.06.2021 19:55:16 Ulrich
NotSolved
20.06.2021 20:27:26 Ulrich
NotSolved
20.06.2021 20:27:28 Ulrich
NotSolved
21.06.2021 08:28:20 Basti
NotSolved
21.06.2021 14:44:33 Gast36288
NotSolved