Mehr als 65536 Datensätze einlesen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Mehr als 65536 Datensätze einlesen von: Josef
Geschrieben am: 01.03.2005 18:42:40

Hallo!

Ich habe folgende Lösung im Forum erhalten:

Sub Read_Large_File_1()
'Liest csv und txt Datein mit mehr als 65536 Datensätzen ein
'und erstellt automatisch eine neu Arbeitsmappe und Worksheets
'Der eingelesene Text wird in Spalte 1 geschrieben
'------------------------------
'Hilfsvariable für Anzahl Datensätze
Dim Text1 As String
'Variablen für den Array nötig
Dim txtlines As Long, i As Long, n As Long
'Neue Mappe und Variables Tabellenblatt deklarieren
Dim tWkb As Workbook, tWks As String
'Für Office97 muss das Array TextArr als String definiert werden
'Entdeckt duch Gerd Z aus dem Herber Forum
Dim textArr As String
Dim ReadFile As String
Dim OldStatusbar
'Dialog öffnen auf Basis von *.dat Files
ReadFile = Application.GetOpenFilename("CSV Files (*.csv;*.txt),")
'Schliessen einer geöffneten Datei
Close #1
'1. Öffnen der Datei
'Den Namen und Pfad bitte anpassen
Open ReadFile For Input As #1
'Die anzahl ist nötig um die Grösse des Arrays zu deklarieren
'Zähler auf 0 setzen
txtlines = 0
Do While Not EOF(1)    ' Schleife bis Dateiende.
    Input #1, Text1    ' Hilfsvariable zum einlesen verwenden
    'Zähler hochzählen
    txtlines = txtlines + 1
Loop
'Schliessen der Datei weil Dateiende erreicht wurde
Close #1
'Erneutes Öffnen um zum Dateianfang zu kommen
Open ReadFile For Input As #1    ' Datei zum Einlesen öffnen.
'Array neu auf die Anzahl der Linien initialisieren
ReDim textArr(txtlines)
'Einlesen der Dateien in das Array
For i = 1 To txtlines
    Input #1, textArr(i)
Next i
Close #1
'Arbeitsmappe erstellen und zuweisen
Workbooks.Add
Set tWkb = ActiveWorkbook
'Alles löschen bis auf eine Tabelle
'>> Kosmetik :-)
For i = Worksheets.Count To 2 Step -1
    Application.DisplayAlerts = False
    Worksheets(i).Delete
    Application.DisplayAlerts = True
Next
OldStatusbar = Application.DisplayStatusBar
'Namen vergeben
Worksheets(1).Name = "Data1"
tWks = tWkb.Worksheets(1).Name
'Daten in aktuelles Sheet schreiben
n = 1
For i = 1 To txtlines
    Application.StatusBar = "Datensatz " & i & " von " & txtlines & " wird eingelesen"
    'Neue Tabelle anlegen wenn Zelle 65536 erreicht wurde
    If i Mod 65536 = 0 Then
        Columns(1).TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, Semicolon:=True, Space:=True, Other:=True, FieldInfo:=Array(1, 1)
        tWkb.Worksheets.Add after:=ActiveSheet
        ActiveSheet.Name = "Data" & i
        tWks = ActiveSheet.Name
        n = 1
    End If
    tWkb.Worksheets(tWks).Cells(n, 1) = textArr(i)
    n = n + 1
Next i
MsgBox ReadFile & " mit " & txtlines & " Datensätzen vollständig eingelesen"
Application.DisplayStatusBar = OldStatusbar
End Sub




Nach dem Aufruf des Makros erhalte ich an folgender Stelle eine Fehlermeldung.

ReDim textArr(txtlines) Fehler beim Kompilieren, erwarte Datenfeld



Wo kann hier bitte der Fehler liegen?


Josef
Bild


Betrifft: AW: Mehr als 65536 Datensätze einlesen von: Kay
Geschrieben am: 01.03.2005 19:09:36

Hallo Josef,

ersetze mal

Dim textArr As String

in

Dim textArr() As String

MfG
Kay


Bild


Betrifft: AW: Mehr als 65536 Datensätze einlesen von: Josef
Geschrieben am: 01.03.2005 20:47:07

Hallo Kay!

Danke für Deine Antwort. Funktioniert
Ein Problem hätte ich da noch. Ich bekomme beim einlesen bei einem Komma folgenden Fehler:

Beispiel 34,80 34 noch in der richtigen Zeile, jedoch 80 in der nächsten Zeile. wo kann hier bitte der Fehler liegen?


Josef


Bild


Betrifft: AW: Mehr als 65536 Datensätze einlesen von: Kay
Geschrieben am: 01.03.2005 21:16:15

Hallo Josef

Sorry dabei kann ich dir auch nicht weiter Helfen.
Überall wo ein Komma vorkommt nimmt er eine neue zeile.
Soweit fortgeschritten bin ich auch noch nicht.
Deshalb noch offen.
Kay


Bild


Betrifft: AW: Mehr als 65536 Datensätze einlesen von: bst
Geschrieben am: 01.03.2005 22:17:10

Abend Josef,

das liegt am: Input #1, Text1

Nimm hier ein: Line Input #1, Text1

Allerdings erscheint mir das Teil unnötig lang und kompliziert.

Versuch vielleicht mal einfach sowas.

HTH, Bernd
--
Option Explicit

Sub LiesMich()
   Dim handle As Integer
   Dim lineno As Long
   Dim eineZeile As String
   
   Worksheets.Add after:=ActiveSheet
   lineno = 1
   handle = FreeFile
   Open "d:\daten\test.txt" For Input As #handle
   While Not EOF(handle)
      Line Input #handle, eineZeile
      Cells(lineno, 1).Value = eineZeile
      lineno = lineno + 1
      If lineno > Rows.Count Then
         Worksheets.Add after:=ActiveSheet
         lineno = 1
      End If
   Wend
   Close #handle
End Sub



Bild


Betrifft: AW: Mehr als 65536 Datensätze einlesen von: Josef
Geschrieben am: 01.03.2005 22:33:24

Hallo!

Danke für Deine Antwort.

Dein Makro würde soweit funktionieren.Ich danke Dir dafür.

Wenn ich jedoch bei meinem Makro diesen Teil (Line Input #1, Text1) ändere, dann wird trotzdem noch immer beim Komma die Zeile getrennt.


Josef


Bild


Betrifft: AW: Mehr als 65536 Datensätze einlesen von: bst
Geschrieben am: 02.03.2005 07:56:45

Morgen Josef,

den Input gibt es zweimal. Ändere beide. Sowie, wie bereits Kay sagte, den Dim.

Dann geht's bei mir. Zumindestens mit 160.000 Zeilen.
Woobei die letzte Zeile der 1. Tabelle (65536) leer bleibt.

HTH, Bernd


Bild


Betrifft: AW: Mehr als 65536 Datensätze einlesen von: Josef
Geschrieben am: 02.03.2005 18:38:00

Hallo! Guten Abend!
Danke für Deinen Hinweis. Jetzt funktioniert alles bestens.

Schönen Abend noch


Josef


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Mehr als 65536 Datensätze einlesen"