Autor: Peter Haserodt  --- Aus Excel VBA - Gruppe: Tutorials

ADO und Excel (8) - Textdateien einlesen simpel

Autor: Peter Haserodt - Erstellt: --      - Letzte Revision: --Gruppenthema: 9 Folgen 1 2 3 4 5 6 7 8 9 Sie sind in Folge:8

ADO und Excel (8) - Textdateien einlesen simpel

Wieviele Beiträge habe ich schon gelesen, die sich mit diesem Thema beschäftigen.
Vor allem mit dem Problem des Aufteilens auf mehrere Blätter.
Dabei ist zumindest mit modernen Systemen auch hier alles ADO.
Selbstverständlich nur, wenn die Datenlieferanten korrekte Strukturen haben und wir ein wenig Arbeit hineinstecken.
Aber erst einmal ein ganz simples Beispiel.

Aber Achtung
: Bitte machen Sie das was ich sage, erstellen Sie die Textdatei wie ich es vorgebe und nehmen Sie nicht irgendeine. Erst wenn Sie den Code verstanden haben, können Sie mit anderen Dateien experimentieren.

Erstellen Sie erst eine neue Arbeitsmappe mit dem Namen Ado9.xls.
Danach im selben Ordner eine Datei test.txt.

In diese Textdatei schreiben Sie folgende Werte - beachten Sie die Trennung mit Strichpunkt. (Sollten Sie mit einer Ländereinstellung arbeiten, die als Dezimaltrennzeichen den Punkt hat, nehmen Sie anstatt des Strichpunktes das Komma) Hier die Inhalte der Textdatei:

1;2;3
4;5;6
7;8;9
10;11;12
13;14;15
16;17;18


(Im nächst Artikel werden wir kennenlernen, wie wir das Trennzeichen beeinflussen können)

Jetzt brauchen wir wieder ein allgemeines Modul und folgenden Code:
Peter Haserodt
  • Formelhilfe
  • Makroentwicklung
  • VBA-Programmierung
  • + + + + + + + + +

Option Explicit

Private Sub TextEinlesenADOhneSchema()
'Peter Haserodt 2007
'Für Standard getrennte (;) textfiles (Auf deutschen Systemen)
'Für andere Trenner braucht man eine Schema.ini
Dim oAdoConnection As Object, oAdoRecordset As Object
Dim sOrdnerPfadOhneSlash As String, sDateiName As String
Dim sHatSpalteKoepfe As String
Dim sQueryString As String
Dim iMaxRows As Long
iMaxRows = 3 ' Anzahl der Zeilen pro Blatt
sQueryString = "Select * From " ' Abschließendes Blank beachten
' Um nur bestimmte Spalten einzulesen abhängig vom Typ, wenn keine
'Spalteköpfe vorhanden sind benutzt man F und die Nummer, ansonsten den Spaltennamen
'Beispiel ohne Spaltennamen für 1. und 3.Spalte
'sQueryString = "Select F1,F3 From "
sHatSpalteKoepfe = "No" ' Selbsterklärend, Yes für wenn welche drin sind
sOrdnerPfadOhneSlash = ThisWorkbook.Path
sDateiName = "test.txt"
Set oAdoConnection = CreateObject("ADODB.CONNECTION")
oAdoConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
 "Data Source=" & sOrdnerPfadOhneSlash & ";" & _
 "Extended Properties=""text;HDR=" & sHatSpalteKoepfe & ";FMT=Delimited"""
Set oAdoRecordset = CreateObject("ADODB.RECORDSET")
oAdoRecordset.Open sQueryString & sDateiName, oAdoConnection, 3, 1, 1
While Not oAdoRecordset.EOF
 Sheets.Add
 ActiveSheet.Range("A2").CopyFromRecordset oAdoRecordset, iMaxRows
Wend
oAdoRecordset.Close
oAdoConnection.Close
End Sub

Codeanalyse

Auf die bekannten Konstrukte aus den bisherigen Artikeln des Turorials gehe ich nicht ein.
Ich setze diese voraus! (Lesen Sie also die ersten Artikel, so wie es sich gehört. Hugh, ich habe gesprochen)

Als erstes interessiert uns iMaxRows.
Hier legen wir fest, wieviele Zeilen pro Blatt ausgegeben werden sollen.
(Stellen Sie sich vor, Sie hätten nicht gehorcht und eine Textdatei genommen, die 60.000 Zeilen hat. Dann hätten Sie jetzt 20.000 neue Arbeitsblätter in Ihrer Mappe - oder eher einen Crash)

Der Querystring ist aus dem Kommentar ersichtlich und aus unseren bisherigen Kenntnissen.

sHatSpaltenKoepfe
ist eine wichtige Information, entweder No oder Yes aber selbsterklärend.

sOrdnerPfadOhneSlash
ist ganz einfach unser Ordner wo die Textdatei liegt, ohne abschließenden Backslash

sDateiName
ist selbsterklärend.

In der ADO Connection setzen wir die Informationen zusammen.

Und weiter unten kommt dann einfach die Schleife, die mit dem optionalen Argument von CopyFromRecordset arbeitet.
(Sie erinnern sich?)
Letztendlich kreieren wir ein Recordset und erzeugen nach jedem dritten Record ein neues Arbeitsblatt.

In der Realität wäre natürlich iMaxRecords irgendwas wie 60.000 oder so.

Ich springe aus dem Fenster

Nein, Sie wagen es nicht - oder doch?
Stellen Sie wirklich die Frage, ob dies auch mit einer .csv Datei geht?

HABEN SIE ES PROBIERT???

Schämen Sie sich - ab in die Ecke und wenn Sie wieder dort rauskommen, lesen Sie mal den Artikel:
CSV - Trallallalla


Weitere Artikel der Gruppe: Tutorials Aus Excel VBA
Nach oben
ToDo
Google Werbung