Excel VBA: Leerzeilen bei CSV Import vermeiden

ThompB

Grünschnabel
Hallo liebe User!

Ich habe ein Problem mit meinem Import einer CSV Datei.

Importiere ich die Datei über den normalen Excel Öffnen Dialog, so gibt es kein Problem, jedoch wenn ich mein Import-Script (Siehe unten) ausführe und in das Tabellenblatt einfüge, in die ich es haben möchte so habe ich das Problem das er Zeilenumbrüche nicht erkennt.

Und zwar sind es Daten aus einem Zeiterfassungstool die importiert werden sollen, da kann es sein das in einer Zeile 2 Werte eingetragen werden. Excel macht beim Import dann zwischen diese 2 Werte 2 Sonderzeichen (Kästchen) führe ich meinen Import durch fügt er an dieser Stelle 2 Leerzeilen ein. Das führt zu Problemen wenn ich die Daten verarbeiten will und das muss daher auf jeden Fall unterbunden werden!

Jetzt meine Frage, wie kann ich überprüfen, ob da so ein Fehler aufgetreten ist und kann er behoben werden. Oder ist es möglich die CSV Datei schon zu überprüfen bevor sie eingefügt wird, denn diese hat komischerweise auch einen Zeilenumbruch?!

Vielen Dank im Vorraus für eure Hilfe
Code ist angehängt

Mit freundlichen Grüßen aus Paderborn
Thomas


Code:
Sub ReadfromCSVSimple(fname As String, Optional FS As String = ";")
   Dim hfile As Integer                             'Filehandle bzw. Dateinummer
   Dim i As Long                                    'Zähler über alle Zeilen
   Dim j As Long                                    'Zähler über alle Spalten
   Dim OneLine As String                            'Eine Zeile als String
   Dim myArr As Variant                             'eine Zeile in Felder getrennt
   
   hfile = FreeFile
   Open fname For Input As #hfile
   While Not EOF(hfile)
      i = i + 1
      Line Input #hfile, OneLine
      myArr = Split(OneLine, FS)
      For j = 0 To UBound(myArr)
         Cells(i, 1 + j).NumberFormat = "General"
         Cells(i, 1 + j).Value = myArr(j)
      Next
   Wend
   Close #hfile
End Sub
 
Also der Zeilenumbruch müsste den ASCII-Code 13 bzw. 10 bzw. 13 und 10 haben. Du könnste also den importierten Text auf diese Zeichen überprüfen.

Sind die Daten "sensibel" oder kannst du ein paar davon hier einstellen. Dann könnte man sich das mal anschauen!?

Gruß Thomas
 
Die Daten sind leider Sensibel, es sind Mitarbeiterbezogene Daten, einsenden kann ich eine solche Datei leider nicht, ich kann hier nur kein kleines Beipiel geben:
"Mustermann";"Max";"56456";"b982342";"1-F-9800-P9";"EV-Projekt";"2345";"";"2010-09-15";"2010-09-19";"QM-Handbuch";"5,50";"6,50";"";"SO6"
"Mustermann";"Max";"56456";"b982342";"1-F-9800-P9";"EV-Projekt";"2345";"";"2010-09-15";"2010-09-19";"QM-Handbuch

Testlauf";"3,50";"6,50";"";"SO5E"
"Mustermann";"Max";"56456";"b982342";"1-F-9800-P9";"EV-Projekt";"2345";"";"2010-09-15";"2010-09-19";"QM-Handbuch";"5,50";"6,50";"";"SO6"

Komischerweise wird in der CSV Datei, wenn ich sie im Text Editor öffne dieser Zeilenumbruch eingefügt.
Als Übergangslösung würde mir auch erstmal reichen, das eine Fehlermeldung ausgegeben wird und dieser Fehler manuell behoben wird, nur das ist wichtig, da ich alle Daten erfassen muss und keine Daten vergessen werden dürfen!

Danke!

Thomas
 
Versuche es mal damit:

Visual Basic:
Dim hfile As Integer                             'Filehandle bzw. Dateinummer
Dim i As Long                                    'Zähler über alle Zeilen
Dim j As Long                                    'Zähler über alle Spalten
Dim OneLine As String                            'Eine Zeile als String
Dim myArr As Variant                             'eine Zeile in Felder getrennt

hfile = FreeFile
Open fname For Input As #hfile
While Not EOF(hfile)
    i = i + 1
    Line Input #hfile, OneLine
'diese IF-Abfrage könnte entscheidend sein!
    If OneLine = "" Then
        i = i - 1
    End If
    myArr = Split(OneLine, FS)
    For j = 0 To UBound(myArr)
        Cells(i, 1 + j).NumberFormat = "General"
        Cells(i, 1 + j).Value = myArr(j)
    Next
Wend
Close #hfile

Durch die IF-Abfrage wird in dem Fall wo OneLine einen Leerstring zurückliefert der Zeilenzähler wieder um 1 zurückgesetzt. Somit werden keine Leerzeilen in Excel eingefügt.

Gruß Thomas
 
Hallo Thomas!

Tut mir leid, das ich gestern nicht mehr geantwortet habe!

Deine Veränderung löscht mir die die Leerzeilen raus, das hilft mir leider noch nicht so viel weiter, da beim Import den Inhalt einer Zelle trennt und damit der Inhalt dieser Zelle und der von 3 weiteren in eine neue schreibt.

Aber ich konnte mich mit meinem Kollegen darauf einigen, das es reicht eine Fehlermeldung auszugeben, damit es manuell gelöst werden kann, nachdem eine Fehlermeldung rausgegangen ist. Da es eigentlich ein unzulässiger Schritt ist mehrere Angaben in die Zelle zu schreiben, in der dieser Fehler auftritt!

Ich Danke dir für deine Hilfe!
 

Neue Beiträge

Zurück