habe eine kleine prozedur geschrieben die mir Textfiles mit bis zu
100.000 Datensätzen in 32.500 happen einliest.
Das Problem bei der Sache, wenn eine Datei mehr als ca 10.000 Datensätze beinhaltet, geht der Import ewig lang.
Anbei der Code
Case "test"
Sheets("test").Select
Range("A2:IV65536").ClearContents
' Zeilen hat den wert 32.500
Do While (Not EOF(1) And row - 1 Line Input #1, buffer
index = index + 1
If index >= von And row - 1 Cells(row, 1) = Val(Mid(buffer, 1, 4)) '
Cells(row, 2) = Val(Mid(buffer, 5, 4)) '
Call checkfirm(row, 3, Mid(buffer, 9, 4)) '
Cells(row, 4) = Mid(buffer, 13, 6) '
Call checkstr(row, 5, Mid(buffer, 19, 10)) '
Call checkstr(row, 6, Mid(buffer, 29, 18)) '
Cells(row, 7) = Trim(Mid(buffer, 47, 3)) '
Call checknum(row, 8, Mid(buffer, 50, 13)) '
Call checknum(row, 9, Mid(buffer, 63, 13)) '
Call checknum(row, 10, Mid(buffer, 76, 13)) '
Call checknum(row, 11, Mid(buffer, 89, 13)) '
Call checknum(row, 12, Mid(buffer, 102, 13)) '
Call checknum(row, 13, Mid(buffer, 115, 13)) '
Call checknum(row, 14, Mid(buffer, 128, 13)) '
Cells(row, 15) = Trim(Mid(buffer, 141, 13)) '
Cells(row, 16) = Trim(Mid(buffer, 154, 13)) '
Cells(row, 17) = Trim(Mid(buffer, 167, 13)) '
Cells(row, 18) = Trim(Mid(buffer, 180, 13)) '
Cells(row, 19) = Trim(Mid(buffer, 193, 13)) '
Cells(row, 20) = Trim(Mid(buffer, 206, 13)) '
Cells(row, 21) = Trim(Mid(buffer, 219, 13)) '
Cells(row, 22) = Trim(Mid(buffer, 232, 13)) '
Call checknum(row, 23, Mid(buffer, 245, 9)) '
Call checknum(row, 24, Mid(buffer, 254, 9)) '
Call checknum(row, 25, Mid(buffer, 263, 9)) '
Cells(row, 26) = Trim(Mid(buffer, 272, 1)) '
Cells(row, 27) = Mid(buffer, 273, 1) '
Cells(row, 28) = Mid(buffer, 274, 1) '
Call checkstr(row, 29, Mid(buffer, 275, 18)) '
Call checknum(row, 30, Mid(buffer, 293, 9)) '
Cells(row, 31) = Mid(buffer, 302, 3) '
row = row + 1
End If
Loop
Range("A1").Select
Wenn die die mini Subs am Anfang rausnehm in den einzelnen Zeilen, gehts zwar schneller aber nicht wirklich viel.
Kann ich hier optimieren? warum so langsam hier.
Andere Methode besser ?
Dan bin ich auf die Methode mit Query Tables gestoßen.
Der Import geht damit sehr schnell, aber er importiert das ganze File,
was bei FIles mit Datensätze > 65xxx fehler bringt.
Wie kann ich bei unteren Methode EndRow festlegen ?
Bei MSDN in Library habe ich leider nichts passendes gefunden?
With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\Users\test\My Documents\test.TXT", Destination:=Range("A2"))
.Name = "test"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileEndRow = 200
.TextFileParseType = xlFixedWidth
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileFixedColumnWidths = Array(4, 4, 4, 6, 10, 18, 3, 13, 13, 13, 13, 13, 13, 13, 13, _
13, 13, 13, 13, 13, 13, 13, 9, 9, 9, 1, 1, 1, 18, 9, 3)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With