Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Probleme mit CSV-Datei

Betrifft: Probleme mit CSV-Datei von: Dirk
Geschrieben am: 01.11.2012 15:44:36

Hallo zusammen,
ich habe schon einige verschiedene Sachen probiert und habe immer noch das gleiche Problem. Ich habe eine CSV-Datei, die in den ersten 14 Zeilen allgemeine Daten hat und dann erst ab Zeile 15 die eigentlichen, mit Komma getrennten, Messdaten.
Loesche ich die ersten 14 Zeilen, laeuft das Programm ohne Probleme. Lasse ich die Zeilen in der Datei, kommt ein Error.

Hier mal der Code:

Sub data_import()

    Dim MyData As String, strData() As String, TmpAr() As String, strFileName As String
    Dim TwoDArray() As String
    Dim i As Long, n As Long, ia As Long
    Const Delim As String = ","
    
    
    Close #1  'event geoeffnete Dateien werden geschlossen
     
'    With Application.FileDialog(msoFileDialogFilePicker)
'        .AllowMultiSelect = False
'        .Title = "Select file"
'        .InitialFileName = "c:\"  'Pfad anpassen
'        .Filters.Add "CSV-Dateien", "*.csv", 1
'        If .Show = -1 Then
'          strFileName = .SelectedItems(1)
'        End If
'     End With

    strFileName = "C:\Users\test3.csv"  'zum Testen der Datei

     If strFileName <> "" Then
        Application.ScreenUpdating = False
        
'        Workbooks.Open strFileName
'            Rows("1:14").Select
'            Selection.Delete Shift:=xlUp
'        Workbooks.Close

        Open strFileName For Binary As #1
        MyData = Space$(LOF(1))
        Get #1, , MyData
        Close #1
        strData() = Split(MyData, vbCrLf)
    
        ia = 1
    
        For i = LBound(strData) To UBound(strData) - 1
            strData(i) = Right(strData(i), Len(strData(i)) - 1)
            strData(i) = Left(strData(i), Len(strData(i)) - 1)
            TmpAr = Split(strData(i), Delim)
            If UBound(TmpAr) > -1 Then
               With ActiveSheet
                 .Cells(ia, 1).Resize(, UBound(TmpAr) + 1) _
                   = Application.Transpose(Application.Transpose(TmpAr))
               End With
            End If
            ia = ia + 1
        Next i
    End If
End Sub

Gibt es eine Moeglichkeit, die ersten 15 Zeilen einfach zu ignorieren? Ich habe schon probiert, die Zeilen einfach zu loeschen, aber dann veraendere ich auch meine Originaldatei.
Es muss doch einen weg geben, das ARRAY erst ab Zeile 15 einzulesen.
Ueber jede Hilfe waere ich sehr dankbar.
Viele Gruesse und DANKE
Dirk

  

Betrifft: AW: Probleme mit CSV-Datei von: Luschi
Geschrieben am: 01.11.2012 16:16:44

Hallo Dirk,

Du hast docjh schon eine Zähl-Variable 'ia'. Binde sie so in die Forschleife ein:

        ia = 1
        
        For i = LBound(strData) To UBound(strData) - 1
            If ia > 14 Then  ' oder 15!? - mußt Du mal  _
testen!
                strData(i) = Right(strData(i), Len(strData(i)) - 1)
                strData(i) = Left(strData(i), Len(strData(i)) - 1)
                TmpAr = Split(strData(i), Delim)
                If UBound(TmpAr) > -1 Then
                   With ActiveSheet
                     .Cells(ia - 14, 1).Resize(, UBound( _
TmpAr) + 1) _
                       = Application.Transpose(Application.Transpose(TmpAr))
                   End With
                End If
            End If
            ia = ia + 1
        Next i
Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: Probleme mit CSV-Datei von: Dirk
Geschrieben am: 01.11.2012 19:43:24

Hallo Luschi,
vielen Dank fuer die schnelle Antwort. Das hatte ich so aehnlich auch schon probiert.
Leider ueberspringt er den Teil schon im Quellcode. Er springt bei

For i = LBound(strData) To UBound(strData) - 1
.
.
.
next i
end if

direkt zu end if.

Der Inhalt von MyData ist in dem Moment: ÿþN a m e : , T E S T ....

LBound(strData) und UBound(strData) haben den Inhalt 0 (NULL).
Deshalb wird die If-Schleife nicht ausgefuehrt.

Gibt es irgendwelche Ideen?

Vielen Dank
Dirk


  

Betrifft: AW: Probleme mit CSV-Datei von: Luschi
Geschrieben am: 02.11.2012 07:13:41

Hallo Dirk,

habe Dir mal mit Deinem Vba-Code ein Beispiel gemacht. Kopiere die Excel- und CSV-Datei
in ein gemeinsames Verzeichnis.
https://www.herber.de/bbs/user/82446.zip

Gruß von Luschi
aus klein-Paris





  

Betrifft: AW: Probleme mit CSV-Datei von: Dirk
Geschrieben am: 02.11.2012 14:54:36

Hallo Luschi,
echt vielen DANK fuer Deine Hilfe. Aber leider klappt es nicht. Ich finde auch nicht die Ursache.
Aus diesem Grund gebe ich Dir mal einen Teil meiner Datei.

https://www.herber.de/bbs/user/82451.zip

Vielleicht hast Du oder jemand anderes eine Idee, warum das nicht geht.
Ich verstehe es nicht. Mit Deiner Datei war das gar kein Problem. Bei meiner ist am Ende das Blatt wieder leer.

Vielen Dank fuer Deine Hilfe.
Viele Gruesse
Dirk


  

Betrifft: AW: Probleme mit CSV-Datei von: Luschi
Geschrieben am: 02.11.2012 16:11:18

Hallo Dirk,

kann Dein Problem nicht nachvollziehen. Habe im Vba-Code nur die 2 Zeilen aktiviert, um die doppelten Anführungsstriche zu entfernen.

https://www.herber.de/bbs/user/82455.zip

Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: Probleme mit CSV-Datei von: Dirk
Geschrieben am: 02.11.2012 16:46:19

Hallo Luschi,

nochmals vielen Dank. Mit meiner Originalversion klappt es leider nicht. Mit der von Dir geschickten klappt es. Da scheint wohl etwas in Excel falsch eingestellt zu sein. Sehr komisch. Kopiere ich alle DATEN aus meiner CSV-Datei in Deine, dann klappt es auch. Nutze ich aber meine Originaldatei, dann beibt der Import LEER. Muss ich das verstehen?

Alles sehr seltsam. So etwas schon mal gehabt?
Viele Gruesse und DANKE
Dirk

P.S.: Ist mit klein-Paris ein Ort an der Mosel gemeint?


  

Betrifft: AW: Probleme mit CSV-Datei von: Luschi
Geschrieben am: 02.11.2012 20:05:28

Hallo Dirk,

wenn du willst/kannst/darfst usw. - schicke mir doch die gezippte Original-CSV-Datei an:
fam.nuck.at.primacom.net
Ersetze in der EMail-Adresse .at. gegen @
Nicht immer ist eine von außen gekennzeichnete CSV-DAtei (Dateityp) das,
was tatsächlich in ihr steckt.
Ein Blick mit einem Hex-Editor in die CSV-Datei sagt mehr als 1000 Beschreibungen.

Gruß von Luschi
aus klein-Paris

PS: klein-Paris - siehe http://de.wikipedia.org/wiki/Klein-Paris (Goethe)


  

Betrifft: AW: Probleme mit CSV-Datei von: Dirk
Geschrieben am: 05.11.2012 14:40:42

Hallo zusammen,
ich moechte mich hier noch einmal ganz ganz herzlich bei Luschi bedanken. Ohne dessen Hilfe haette ich das Problem NIEMALS loesen koennen. Ich moechte Euch aber auch die Loesung nicht vorenthalten, die mir Luschi geschickt hat:

Sub data_import()
On Error GoTo Errorhandler

      Dim MyData As String, strData() As String, TmpAr() As String, strFileName As String
      Dim TwoDArray() As String
      Dim i As Long, n As Long, ia As Long, intFF As Integer
      Dim rg1 As Range, rg2 As Range
      Const Delim As String = ","
      
      
      Close #1  'event geoeffnete Dateien werden geschlossen
       
      With Application.FileDialog(msoFileDialogFilePicker)
          .AllowMultiSelect = False
          .Title = "Select file"
          .InitialFileName = "c:\"  'Pfad anpassen
          .Filters.Add "CSV-Dateien", "*.csv", 1
          If .Show = -1 Then
            strFileName = .SelectedItems(1)
          End If
       End With
  
        If strFileName <> "" Then
          GetMoreSpeed True
          
          ThisWorkbook.Worksheets("Tabelle1").Cells.Clear
          
          intFF = FreeFile
          Open strFileName For Binary As #intFF
          MyData = Space$(LOF(1))
          Get #intFF, , MyData
          Close #intFF
          strData() = Split(MyData, vbLf)
      
          ia = 1
      
          For i = LBound(strData) To UBound(strData) - 1
              If ia > 14 Then

                 TmpAr = Split(strData(i), Delim, -1, vbTextCompare)
                 If UBound(TmpAr) > -1 Then
                    With ActiveSheet
                       
                       'Zellbereich, in den geschrieben werden soll
                       Set rg1 = .Cells(ia - 14, 1).Resize(, UBound(TmpAr) + 1)
                       n = 0
                       For Each rg2 In rg1
                           '&0H-Werte entfernen
                           rg2.Value = Replace(TmpAr(n), Chr(0), "", 1, -1, vbBinaryCompare)
                           n = n + 1
                       Next rg2

                    End With
                 Else
                    Debug.Print TmpAr(0)
                 End If
             End If
             ia = ia + 1
         Next i
         
         Erase strData()
         Erase TmpAr()
         Erase TwoDArray()
          
      End If
      
      GetMoreSpeed False
      ActiveSheet.Range("A1").Select
      MsgBox "F e r t i g!", vbInformation Or vbSystemModal
      Exit Sub

Errorhandler:
      
      GetMoreSpeed False
      On Error Resume Next
      Close intFF
      
      MsgBox "Fehler beim Einlesen...!" & String(75, 160), vbSystemModal Or vbCritical,  _
strFileName
  End Sub
Es funktioniert alles ohne Probleme und ich konnte schon die letzten Aenderungen einpflegen. Die von einem Datenlogger produzierte CSV-Datei war wohl eine Katastrophe.
VIELEN VIELEN DANK !!!
Viele Gruesse
Dirk


 

Beiträge aus den Excel-Beispielen zum Thema "Probleme mit CSV-Datei"