Hallo,
ich habe mal mit deinem Code eine Testdatei mit 1000 Zeilen
zu je 255 Werten (Zahlen mit 2 Nachkommastellen) geladen.
Abgesehen davon, dass in der zweiten Sub die Variable
tabellenname nicht bekannt ist und ihre Verwendung als
Dateinummer deshalb einen Fehler verursacht, hat das 66
Sekunden gedauert. Das Problem mit den als Text gespeicherten
Zahlen kann ich nicht nachvollziehen, die entsprechende
Fehleroption habe ich aktiviert (Excel 2003).
Mit dem folgenden Code dauert das Einlesen derselben CSV-Datei
0,9 Sekunden, ist also ca. 75mal schneller:
Option Explicit
Public Sub LiesCSV()
Dim strPrompt As String ' InputBox
Dim strTitel As String ' dto.
Dim intType As Integer ' dto.
Dim vntDateiName As Variant
Dim vntBlattName As Variant
Dim wksNeu As Worksheet
Dim intFNr As Integer ' Dateinummer
Dim lngZeile As Long
Dim strInput As String
strPrompt = "Für welche Temperatur (30°C, 60°C, 90°C" _
& vbCrLf & "oder 120°C) wollen Sie Daten einfügen?"
strTitel = "Temperatur"
intType = 1 ' nur Zahlen
Do
vntBlattName = Application.InputBox(Prompt:=strPrompt, _
Title:=strTitel, Type:=intType)
Select Case CInt(vntBlattName)
Case 0, 30, 60, 90, 120 ' 0 = Abbrechen (False)
Exit Do
Case Else
Beep
strPrompt = strPrompt & vbCrLf & vbCrLf & _
"Bitte nur 30, 60, 90 oder 120 eingeben!"
End Select
Loop
If vntBlattName = False Then
Exit Sub
Else
vntDateiName = Application.GetOpenFilename( _
FileFilter:="Textdateien (*.csv), *.csv")
If vntDateiName = False Then
Exit Sub
Else
Set wksNeu = Worksheets.Add
wksNeu.Name = CStr(vntBlattName) & "°C"
intFNr = FreeFile
lngZeile = 0
Open CStr(vntDateiName) For Input As #intFNr
Do
lngZeile = lngZeile + 1
Line Input #intFNr, strInput
wksNeu.Cells(lngZeile, 2).Value = strInput
Loop Until EOF(intFNr)
wksNeu.UsedRange.TextToColumns Destination:=wksNeu. _
Range("B1"), DataType:=xlDelimited, Semicolon:=True
End If
End If
End Sub
Weil in deinem Code ab Spalte 2 eingelesen wird, habe ich
das so gelassen. Wenn deine Datei in manchen Spalten z. B.
Text oder Datum enthält, musst du bei TextToColumns eventuell
noch den Parameter FieldInfo ergänzen, wenn es nur Zahlen sind,
kann er entfallen. Das Problem mit als Text gespeicherten
Zahlen trat hier ebenfalls nicht auf.
Gruß
|