Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1968to1972
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

VBA CSV/TXT Import (Datum statt Wert und falsche Trennung)

VBA CSV/TXT Import (Datum statt Wert und falsche Trennung)
05.03.2024 07:44:29
Josef
Guten Morgen Zusammen,

ich bin total am verzweifeln. Mache schon seit 2 Tagen am VBA Code herum und bekomme keine Lösung. Vlt. könnt ihr mir dabei helfen:

Per VBA importiere ich die CSV/TXT Datei mit dem Dateinamen der sich in Zelle b5 befindet in die Zelle M10. Als Trennung verwende ich das Zeichen, dass in Zelle c6 steht. Soweit funktioniet auch alles. Nun zu meinen Problemen...
1. Wenn Werte in der CSV/TXT Datei Punkte enthalten z. b.: 6.99 dann wird ein Datum angezeigt
2. Wenn die Werte in der CSV/TXT durch mehrere Leerzeichen oder durch mehrere Kommas von einander getrennt sind z. b.: "25.15 15.25 6.99", dann werden die Trennzeichen nicht als 1 Trennzeichen behandelt und die Werte werden in falsche Spalten eingefügt. Dh. in Spalte M10 steht dann 25.15 in Spalte N10 ist leer (da zw. den Zahlen 25.15 und 15.25. zwei leerzeichen sind usw..

Ich hoffe wirklich das ihr mir dabei helfen könnt. Anbei mein aktueller Code:

Sub ImportCSV2() ' CSV IMPORT in Tabelle1



Dim ws1 As Worksheet
'Dim ws2 As Worksheet
Dim searchText As String
Dim fileName As String
Dim filePath As String
Dim delimiter As String

Tabelle1.Range("m9:aO500").ClearContents 'Der Import

' Setze Arbeitsblätter
Set ws1 = ThisWorkbook.Sheets("Tabelle1")
'Set ws2 = ThisWorkbook.Sheets("Tabelle2")

' Definiere den Suchtext aus Zelle G2
searchText = ws1.Range("b5").Value

' Setze das Laufwerk und den Pfad zur CSV-Datei
filePath = "C:\Dokumente\"

' Suche nach der CSV-Datei, die den Suchtext enthält
fileName = Dir(filePath & "*" & searchText & "*.csv")

' Überprüfe, ob eine Datei gefunden wurde
If fileName > "" Then
' Setze das Trennzeichen für die CSV-Datei
'delimiter = vbTab ' Tabstop
'delimiter = ";" ' Semikolon
'delimiter = " " ' Slash
delimiter = ActiveSheet.Range("c6")

' Lösche den Inhalt von Tabelle2
'ws2.Cells.Clear

' Öffne die CSV-Datei und importiere sie in Tabelle2
With ws1.QueryTables.Add(Connection:="TEXT;" & filePath & fileName, Destination:=ws1.Range("m10"))
.TextFileOtherDelimiter = delimiter
.TextFileParseType = xlDelimited
.Refresh
End With

For Each cell In ws1.Range("M10:M500")
If cell.Value = "" Then
If cell.Offset(0, 1).Value = "" Then
cell.Offset(0, 1).ClearContents
End If
End If
Next cell

MsgBox "Die CSV-Datei wurde erfolgreich importiert.", vbInformation
Else

' Wenn keine CSV-Datei gefunden wurde, suche nach einer TXT-Datei
txtFileName = Dir(filePath & "*" & searchText & "*.txt")

' Überprüfe, ob eine TXT-Datei gefunden wurde
If txtFileName > "" Then
delimiter = ActiveSheet.Range("c6")
' Öffne die TXT-Datei und importiere sie in Tabelle1
With ws1.QueryTables.Add(Connection:="TEXT;" & filePath & txtFileName, Destination:=ws1.Range("M10"))
.TextFileOtherDelimiter = delimiter
.TextFileParseType = xlDelimited
.Refresh
End With

For Each cell In ws1.Range("M10:M500")
If cell.Value = "" Then
If cell.Offset(0, 1).Value = "" Then
cell.Offset(0, 1).ClearContents
End If
End If
Next cell

MsgBox "Die TXT-Datei wurde erfolgreich importiert.", vbInformation

Else
MsgBox "Es wurde keine CSV-Datei mit dem Suchtext gefunden.", vbExclamation
End If
End If

End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: VBA CSV/TXT Import (Datum statt Wert und falsche Trennung)
05.03.2024 08:07:19
Zahlendreher
Hallo!

Kannst du bitte eine Beispieldatei hochladen, damit ich es mit deinem Code durchgehen kann?

Beste Grüße
AW: VBA CSV/TXT Import (Datum statt Wert und falsche Trennung)
05.03.2024 09:01:23
Yal
Hallo Josef,

der QueryTables.Add erzeugt ein QueryTable-Objekt. Diese hat die Eigenschaft "TextFileDecimalSeparator", den Du setzen könntest.

Ausserdem besteht der Code zum Grossenteil aus Wiederholung. Wenn man die Gemeinsamkeit zusammenbringt, wird es kompakter:

Sub ImportCSV2() ' CSV IMPORT in Tabelle1

Dim ws1 As Worksheet
'Dim ws2 As Worksheet
Dim searchText As String
Dim fileName As String
Dim delimiter As String

Const cFilePath = "C:\Dokumente\"

Tabelle1.Range("m9:aO500").ClearContents 'zielbereich leeren

Set ws1 = ThisWorkbook.Sheets("Tabelle1")
'Set ws2 = ThisWorkbook.Sheets("Tabelle2")
searchText = ws1.Range("b5").Value 'Teil der Dateiname

fileName = Dir(cFilePath & "*" & searchText & "*.csv")
If fileName = "" Then fileName = Dir(cFilePath & "*" & searchText & "*.txt")

If fileName = "" Then
MsgBox "Es wurde weder CSV- noch TXT-Datei mit dem Suchtext gefunden.", vbExclamation
Else
'delimiter = vbTab ' Tabstop
'delimiter = ";" ' Semikolon
'delimiter = " " ' Slash
delimiter = ActiveSheet.Range("c6").Value
' Öffne die CSV-Datei und importiere sie in Tabelle2
With ws1.QueryTables.Add(Connection:="TEXT;" & filePath & fileName, Destination:=ws1.Range("m10"))
'--- HIER!---
.TextFileDecimalSeparator = ...
'---
.TextFileOtherDelimiter = delimiter
.TextFileParseType = xlDelimited
.Refresh
End With

For Each cell In ws1.Range("M10:M500")
If cell.Value = "" And cell.Offset(0, 1).Value = "" Then cell.Offset(0, 1).ClearContents
Next cell

MsgBox "Die Datei" & vbCr & fileName & vbCr & "wurde erfolgreich importiert.", vbInformation
End If
End Sub


VG
Yal
Anzeige
AW: VBA CSV/TXT Import (Datum statt Wert und falsche Trennung)
05.03.2024 09:39:00
Josef
Hallo Yal,

habe es jetzt so angepasst wie von dir vorgeschlagen, allerdings dauert der Import nun länger (was nicht ganz so schlimm wäre). Allerdings habe ich weiterhin das problem mit dem Datum, obwohl ich nun den filedecimalseparator nutze. Mir kommt es vor, als ob Excel sich das merkt, ob die Datei schon mal importiert wurde und wie ich damals "Text zu Spalte" ausgeführt habe.
Bevor ich Excel angegeben habe, was er als Trennzeichen verwenden soll, hat Excel den kompletten Text aus der csv in eine Zelle geschrieben.
Nun teilt er die Werte automatisch in mehrere Spalten auf (auch wenn ich keinen Trennzeichen vorgebe). Als ob es irgendwo im Cache hängt.
Daher glaube ich auch, dass Excel sich das irgendwo merkt, dass beim Import dieser csv in der Spalte mal ein Datum erkannt wurde und er es nun immer so macht.
Anzeige
AW: VBA CSV/TXT Import (Datum statt Wert und falsche Trennung)
05.03.2024 11:12:52
Zahlendreher
Hallo!

Füge einmal .TextFileColumnDataTypes = (z. B.) Array(2, 2, 2, 2) ein. Jede Zahl steht für den Dateityp der Spalte. Die Bedeutung der Konstanten findest du hier: https://learn.microsoft.com/de-de/office/vba/api/excel.xlcolumndatatype). Dann sollte er beim Importieren der Datei auf den Dateityp Rücksicht nehmen.

Beste Grüße
AW: VBA CSV/TXT Import (Datum statt Wert und falsche Trennung)
05.03.2024 11:25:28
Yal
Hallo Josef,

ich habe nur aufgestellt, was mir aufgefallen ist.
Ich würde selber eh nicht über VBA die Text/csv-Datei ins Excel reinladen, sondern über Power Query. Insbesonders wenn Du mit VBA noch nicht fit bist, kommst Du mit PQ viel schneller

Siehe Kapitel 5 in https://excelhero.de/power-query/power-query-ganz-einfach-erklaert/

VG
Yal
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige