Clever-Excel-Forum

Normale Version: csv-Datei in vorhandene Exceldatei einlesen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4 5
Hallo Ihr Lieben allle,

da habt ihr  mir ja Einiges zum Überlegen und Testen aufgegeben - vielen Dank für eure Mühe - ist ist eben gut, ein Forum hinter sich zu wissen!
Hallo,

nach dem Testen mit verschiedenen Dateien und Größen abe ich mich für den Code von Uwe entschieden - funktioniert soweit einwandfrei, nur kann ich noch nicht damit weiterarbeiten.
Alle Elemente der csv-Datei werden als Text eingelesen, die erste Spalte benötigte ich aber als Datum formatiert. Autonomes Öffnen in Excel behält das Format bei, beim Öffnen mittels VBA-Code wandelt dieser jedoch in Text um, kann man das noch ändern und wo im Code?
Bin für eure Hilfe dankbar!

Ich habe den Code erweitert
Code:
For j = 0 To UBound(arHilf)
    If IsDate(arHilf(j)) Then
       arData(i, j) = CDate(arHilf(j))
    ElseIf IsNumeric(arHilf(j)) Then
       arData(i, j) = CDbl(arHilf(j))
    Else
       arData(i, j) = arHilf(j)
    End If
Next

und bekomme nun den Laufzeitfehler 1004 in der Zeile
.Range("A1").Resize(UBound(arData, 1) + 1, UBound(arData, 2) + 1) = arData
"Anwendungs- oder objektdefinierter Fehler".


Code:
Sub CSV_Datei_einlesen()
    Set fdDialog = Application.FileDialog(msoFileDialogFilePicker)
    With fdDialog
        .Filters.Add "CSV-Dateien", "*.CSV", 1
        .Title = "Bitte Datei auswählen"
        .AllowMultiSelect = False
        If .Show = -1 Then
            strDatei = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With
    Set objTextFile = CreateObject("Scripting.FileSystemObject").OpenTextFile(strDatei, 1, False)
    strInhalt = objTextFile.ReadAll
    objTextFile.Close
    varErgebnis = Split(strInhalt, vbCrLf)
    ReDim arData(0 To UBound(varErgebnis), 0 To UBound(Split(varErgebnis(0), ";")))
    For i = 0 To UBound(varErgebnis)
        arHilf = Split(varErgebnis(i), ";")
        For j = 0 To UBound(arHilf)
           If IsDate(arHilf(j)) Then
                arData(i, j) = CDate(arHilf(j))
            ElseIf IsNumeric(arHilf(j)) Then
                arData(i, j) = CDbl(arHilf(j))
            Else
                arData(i, j) = arHilf(j)
            End If
        Next
    Next
    With Sheets("Konvert")
        .UsedRange = ""
        .Range("A1").Resize(UBound(arData, 1) + 1, UBound(arData, 2) + 1) = arData
    End With
End Sub
Hallo Günter,

bei mir läuft das mit beiden CSV´s durch.    :s

Gruß Uwe
Hallo Uwe,

die erste Datei läuft bei mir auch ordentlich durch, nur bei der zweiten "Kontoauszuege..." gibt es das Problem und dort wird auch aus dem Haben-Betrag ein Datum gemacht, obwohl die Original-csv-Datei dort Standard-formatiert ist.

Kann es sein, dass es an der csv-Datei liegt? Ich habe diese um weitere Datensätze aus der Originaldatei erweitert, vielleicht kannst du es bitte auch einmal mit dieser bei dir ausprobieren?
Hallo Uwe,

ich konnte den Fehler eingrenzen:

1. Die Zellinhalte der Spalte "Haben" werden in ein Datum umgewandelt
2. Bis zur Zeile 12 wird der Betrag 42,5 in das Datum 01.05.1942 gewandelt
3. In der Zeile 12 ist der Habenbetrag 127,5 und den kann Excel nicht in ein Datum umwandeln, deshalb der Abbruch.

ABER, wieso wird der Standardwert in der Spalte "Haben" überhaupt in ein Datum umgewandelt? Mit der Datei "csv..." passiert das doch auch nicht, nur mit der Datei "Kontoauszuege..."?

Rätselhaft, rätselhaft...

Meine Codeerweiterung war doch syntaktisch und logisch richtig?!
Code:
Sub M_snb()
  With Application.FileDialog(3)
    .Filters.Add "CSV-Dateien", "*.CSV"
    .Title = "Bitte Datei auswählen"
    If .Show = -1 Then c00 = CreateObject("Scripting.FileSystemObject").OpenTextFile(.SelectedItems(1)).readall
  End With
  
  With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    .SetText Replace(c00, ";", vbTab)
    .PutInClipboard
  End With

  Application.Goto Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1)
  Sheet1.PasteSpecial "Unicode Text"
End Sub
Hallo snb,

was soll ich mit deinen Bruchstücken ohne jeden Kommentar?

Außerdem laufen die Code nicht, da überall die Variablendeklarationen fehlen!

Schalte ich jedoch die Variablendeklaration aus, dann kommt bei dieser Zeile:
Code:
 Sheet1.PasteSpecial "Unicode Text"


der Fehler, dass die PasteSpecial-Methode nicht ausgeführt werden konnte!
Hallo Günter,

Da Uwe in seinem Code den zu befüllenden Bereich nur leert, kann es passieren das vorhandene Formate (wenn auch nur irgendwann zufällig entstanden) beibehällt.

Vielleicht die letzten Zeilen in Uwes Code so testen:


PHP-Code:
   With Sheets("Konvert")
 
       .UsedRange.Clear
        
.Columns("A").NumberFormat "DD.MM.YYYY"
 
       .Range("A1").Resize(UBound(arData1) + 1UBound(arData2) + 1) = arData
    End With 


Hier wird dann der im benutzen Breich alles gelöscht (auch alle Formate und Formatierungen) und die Spalte A vor dem reinschreiben als Datum formatiert.
Hallo Atilla,

jetzt klappt es mit dem Einlesen des Datum, aber der Haben-Betrag wird immernoch als Datum ausgegeben und stürzt dann ab, wenn der Betrag nicht in ein Datum umgewandelt werden kann.

Ich stelle die 3 Dateien hier noch einmal mit dem aktuellen Stand ein - die csv.csv läuft, die kontoauszuege.csv stürzt ab und dort werden die Beträge als Datum eingelesen.
(27.11.2015, 17:38)Glausius schrieb: [ -> ]Hallo snb,

was soll ich mit deinen Bruchstücken ohne jeden Kommentar?

Außerdem laufen die Code nicht, da überall die Variablendeklarationen fehlen!

Schalte ich jedoch die Variablendeklaration aus, dann kommt bei dieser Zeile:
Code:
 Sheet1.PasteSpecial "Unicode Text"


der Fehler, dass die PasteSpecial-Methode nicht ausgeführt werden konnte!

1. Selbt analysieren/reflektieren und testen
2. Option Explicit ausblenden
3. Hast du eines Arbeitsblatt mit codename 'Sheet1' ?, vielleicht könntest du (wenn es nicht zoviel Mühe gibt) diese anpassen (eben VBA-Anfänger sind in der Lage dass zu schaffen). Darum/dazu muss man Code erst analysieren.

Es gibt immer F1 und F2 in der VBEditor als Helfer.
Seiten: 1 2 3 4 5