Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

csv-Datei in vorhandene Exceldatei einlesen
#11
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!
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top
#12
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
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top
#13
Hallo Günter,

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

Gruß Uwe
Antworten Top
#14
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?


Angehängte Dateien
.csv   Kontoumsaetze_360_210248101_20151124_182604.csv (Größe: 2,89 KB / Downloads: 6)
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top
#15
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?!
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top
#16
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
Antworten Top
#17
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!
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top
#18
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.
Gruß Atilla
Antworten Top
#19
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.


Angehängte Dateien
.xlsm   Erfassungsvorschlag.xlsm (Größe: 49,26 KB / Downloads: 1)
.csv   csv kontoauszug.csv (Größe: 3,12 KB / Downloads: 1)
.csv   Kontoumsaetze.csv (Größe: 2,89 KB / Downloads: 2)
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top
#20
(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.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste