wie schon der Titel sagt, habe ich ein zeitliches Problem beim Auslesen von Textdateien (.csv, .json, etc). Ein Datensatz dauert etwa 300ms (Öffnen+Schließen von 3 Dateien je 100ms), da ich aber tausende von Datensätzen habe wird der PC praktisch unbenutzbar für einen längeren Zeitraum - ein untragbarer Zustand.
Die üblichen Googleantworten helfen mir leider nicht weiter, da die Erzeugung der Textdateien schlampig realisiert wurde. Manche Daten stehen durch Tabstops in anderen Spalten als A beim Öffnen mit Excel und eine Anpassung bei der Erzeugung liegt außerhalb meiner Macht. Zur Korrektur sehe ich mich gezwungen über UsedRange die Daten ins Array nachzutragen, was ich nicht machen kann wenn ich die Dokumente nicht öffne.
Über bin über jeden Vorschlag zur Zeitersparnis dankbar. Am Ende muss die Funktion ein einspaltiges Array zurückgeben. Ich weiß im vorhinein nicht über wievlele Zeilen die Textdateien verfügen.
mfg Mohrrunkel
Unten stehende Funktion wird wie folgt im Makro aufgerufen:
aData = GetDefFile(CStr(aFiles(0, 1))) 'aFiles: Sammlung diverser Pfade+Dateinamen
'Stop
'For i = 1 To UBound(aData, 1)
'Debug.Print aData(i, 1)
'Next i
Private Function GetDefFile(ByRef sFile As String)
Dim wkbQ As Workbook
Dim rZelle As Range
Dim aData As Variant
On Error GoTo ErrorHandler
Set wkbQ = Workbooks.Open(sFile)
'Debug.Print sFile
On Error GoTo 0
With wkbQ.Sheets(1)
aData = .Range(.Cells(1, 1), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 1))
If .UsedRange.Columns.Count > 1 Then
For Each rZelle In .Range(.Cells(1, 2), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, . _
UsedRange.Columns.Count)).SpecialCells(xlTextValues)
aData(rZelle.Row, 1) = aData(rZelle.Row, 1) & rZelle.Text
Next rZelle
End If
GetDefFile = aData
End With
Application.DisplayAlerts = False
wkbQ.Close
Application.DisplayAlerts = True
Exit Function
ErrorHandler:
GetDefFile = ""
End Function