27.11.2015, 17:01 (Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2015, 17:04 von Glausius.)
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
Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
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?
Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
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?!
Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
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
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(arData, 1) + 1, UBound(arData, 2) + 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.
27.11.2015, 18:57 (Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2015, 18:57 von Glausius.)
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.
Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
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.