Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1744to1748
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
Inhaltsverzeichnis

Textdatei Ex und Import

Textdatei Ex und Import
24.03.2020 08:06:21
Olga
Guten Morgen,
ich habe Probleme mit der Geschwindigkeit beim Importieren der Textdatei in das Tabellenblatt
Wie kann ich dies optimieren?
Danke!
Gruß
Olga
https://www.herber.de/bbs/user/136063.xlsm

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textdatei Ex und Import
24.03.2020 11:26:20
Günther
Moin Olga,
zu deinem Code kann ich nichts sagen, da ich VBA-verdächtige Files aus dem Internet nicht herunterlade. - Aber versuche einmal diesen Weg: Daten-Daten abrufen und transformieren-Aus Text/CSV.
Gruß
Günther
AW: Textdatei Ex und Import
24.03.2020 11:36:12
fcs
Hallo Olga,
1. Maßnahme: vorübergehend Deaktivieren der Bildschirm-Aktualisierung.
LG
Franz
Sub Import_txt_alt()
Dim lRow As Long, lCol As Integer
Dim sText As String
Dim cnt As Object
'Textdatei
sFile = ThisWorkbook.Path & "\Angebot.txt"
'Fehlermeldung falls nicht vorhanden
If Dir(sFile) = "" Then
MsgBox "Datei wurde nicht gefunden" & vbLf & "oder verschoben!"
Exit Sub
End If
Application.ScreenUpdating = False
lRow = 1 'erste Zeile
lCol = 9 'erste Spalte
Close
'Txt öffnen und Daten einlesen
Open sFile For Input As #1
With Sheets("Angebot")
Do Until EOF(1)
Line Input #1, sText
Do While InStr(sText, ";")
.Cells(lRow, lCol).Value = Left(sText, InStr(sText, ";") - 1)
sText = Right(sText, Len(sText) - InStr(sText, ";"))
lCol = lCol + 1
Loop
.Cells(lRow, lCol).Value = sText
lRow = lRow + 1
lCol = 9
Loop
Close
'Zahlenwerte formatieren Menge
For Each cnt In .Range(.Cells(2, 10), .Cells(.Rows.Count, 10).End(xlUp))
cnt.Value = fncZahl(sZahl:=cnt.Value, str1000er:=".", strDezimal:=",")
Next
'Zahlenwerte formatieren EP, GP
For Each cnt In .Range(.Cells(2, 13), .Cells(.Rows.Count, 14).End(xlUp))
cnt.Value = fncZahl(sZahl:=cnt.Value, str1000er:=".", _
strDezimal:=",")
Next
End With
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Textdatei Ex und Import
24.03.2020 13:15:48
Olga
Hallo Franz,
das bringt etwas jedoch bei mehreren 100 Datensätzen ist s doch ziemlich langsam.
Danke!
Gruß
Olga
AW: Textdatei Ex und Import
24.03.2020 14:43:39
fcs
Hallo Olga,
was für Zeiten erwartest du denn?
Auf meinem schon etwas betagten PC braucht das Makro in deiner Testdatei für 1000 Zeilen ca, 5,5 Sekunden.
Solltest du in deiner Datei noch irgendwelche Formeln haben, die mit den importierten Daten rechnen, dann muss zusätzlich der Berechnungsmodus auf manuell gesetzt werden.
Eine weitere Bremse kann sein, wenn die Datei auf Microsoft-OneDrive gespeichert ist und automatisches Speichern aktiv ist. Hier ist es ratsam das automatische Speichern der Datei zu deaktivieren.
Ich hab das Makro jetzt mal umgeschrieben, so dass die Daten über ein Daten-Array aufbereitet werden und nicht über viele Zugriffe auf einzelne Zellen. Da sinkt die Zeit zur Ausführung des Makros auf unter 1 Sekunde.
LG
Franz
Sub Import_txt()
Dim lRow As Long, lCol As Integer
Dim sText As String
Dim arrData
Dim tStart, tStop
tStart = VBA.Timer
'Textdatei
sFile = ThisWorkbook.Path & "\Angebot.txt"
'Fehlermeldung falls nicht vorhanden
If Dir(sFile) = "" Then
MsgBox "Datei wurde nicht gefunden" & vbLf & "oder verschoben!"
Exit Sub
End If
Close 'alle offenen Dateien schliessen
'Txt öffnen und Datensätze zählen
Open sFile For Input As #1
lRow = 0
Do Until EOF(1)
Line Input #1, sText
lRow = lRow + 1
Loop
Close #1
'Array für die Daten dimensionieren
ReDim arrData(1 To lRow, 1 To 9)
'Txt öffnen und Daten einlesen
Open sFile For Input As #1
lRow = 1 'erste Zeile
lCol = 1 'erste Spalte
Do Until EOF(1)
Line Input #1, sText
Do While InStr(sText, ";")
arrData(lRow, lCol) = Left(sText, InStr(sText, ";") - 1)
sText = Right(sText, Len(sText) - InStr(sText, ";"))
lCol = lCol + 1
Loop
arrData(lRow, lCol) = sText
lRow = lRow + 1
lCol = 1
Loop
Close #1
'Zahlenwerte formatieren
For lCol = 1 To 9
Select Case lCol
Case 2, 5, 6
For lRow = 2 To UBound(arrData, 1)
arrData(lRow, lCol) = fncZahl(sZahl:=arrData(lRow, lCol), str1000er:=".", _
strDezimal:=",")
Next
End Select
Next
'Werte aus Array ins Tabellenblatt übertragen
Application.ScreenUpdating = False
With Sheets("Angebot")
.Cells(1, 9).Resize(UBound(arrData, 1), UBound(arrData, 2)) = arrData
End With
Application.ScreenUpdating = True
tStop = VBA.Timer
MsgBox "Fertig" & vbLf & "Zeit: " & tStop - tStart
End Sub

Anzeige
AW: Textdatei Ex und Import
25.03.2020 04:27:42
Olga
Hallo Franz,
nochmals Dank für Deine Unterstützung.
Leider wird das Makro bei fncZahl(sZahl:=arrData stehen.
Danke!
Gruß
Olga
'Zahlenwerte formatieren
For lCol = 1 To 9
Select Case lCol
Case 2, 5, 6
For lRow = 2 To UBound(arrData, 1)
arrData(lRow, lCol) = fncZahl(sZahl:=arrData(lRow, lCol), str1000er:=".", _
strDezimal:=",")
Next
End Select
Next

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige