Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
576to580
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
576to580
576to580
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Mehr als 65536 Datensätze einlesen

Mehr als 65536 Datensätze einlesen
01.03.2005 18:42:40
Josef
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

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehr als 65536 Datensätze einlesen
01.03.2005 19:09:36
Kay
Hallo Josef,
ersetze mal
Dim textArr As String
in
Dim textArr() As String
MfG
Kay
AW: Mehr als 65536 Datensätze einlesen
01.03.2005 20:47:07
Josef
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
AW: Mehr als 65536 Datensätze einlesen
01.03.2005 21:16:15
Kay
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
Anzeige
AW: Mehr als 65536 Datensätze einlesen
01.03.2005 22:17:10
bst
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

Anzeige
AW: Mehr als 65536 Datensätze einlesen
01.03.2005 22:33:24
Josef
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
AW: Mehr als 65536 Datensätze einlesen
02.03.2005 07:56:45
bst
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
AW: Mehr als 65536 Datensätze einlesen
02.03.2005 18:38:00
Josef
Hallo! Guten Abend!
Danke für Deinen Hinweis. Jetzt funktioniert alles bestens.
Schönen Abend noch
Josef
Anzeige

76 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige