Registriert seit: 11.04.2014
Version(en): 2021
26.11.2015, 17:58
(Dieser Beitrag wurde zuletzt bearbeitet: 26.11.2015, 19:57 von Glausius.)
Hallo, mir macht dieser Code: Code: Option Explicit Public arHilf As Variant Public fdDialog As FileDialog Public i As Integer Public j As Integer Public objTextFile As Object Public strDatei As String Public strInhalt As String Public varErgebnis As Variant
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 15) For i = 0 To UBound(varErgebnis) arHilf = Split(varErgebnis(i), ";") If UBound(arHilf) = 15 Then For j = 0 To 15 If IsNumeric(arHilf(j)) Then arData(i, j) = CDbl(arHilf(j)) Else arData(i, j) = arHilf(j) End If Next End If Next Sheets("Konvert").Range("A1").Resize(UBound(arData) + 1, 15) = arData End Sub
beim Einlesen vorhandener csv-Dateien in das Blatt("Konvert") der vorhandenen Exceldatei Probleme! Die eine csv-Datei wird eingelesen und die andere nicht??! Warum ist das so bzw. was ist an dem Code nicht ricchtig und muss anderes gemacht werden? Als Anlage die Exceldatei, in die eingelesen werden soll: Erfassungsvorschlag.xlsm - alles nicht Relevante ist entfernt! Weiterhin die csv.Dateien: csv Kontoauszug.csv - wird eingelesen Kontoumsaetze_360_.....csv - wird nicht eingelesen Wer kann mir helfen?
Erfassungsvorschlag.xlsm (Größe: 41,1 KB / Downloads: 4)
csv kontoauszug.csv (Größe: 3,12 KB / Downloads: 7)
Kontoumsaetze_360_210248101_20151124_182604.csv (Größe: 2,02 KB / Downloads: 6)
Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo Günter, in der 2. Datei ist es eine Spalte mehr. Ändere mal folgende 2 Codezeilen so ab (ist aber alles ungetestet). Code: ReDim arData(0 To UBound(varErgebnis), 0 To 16)
Code: Sheets("Konvert").Range("A1").Resize(UBound(arData) + 1, 16) = arData
Gruß Stefan Win 10 / Office 2016
Registriert seit: 11.04.2014
Version(en): 2021
26.11.2015, 20:05
(Dieser Beitrag wurde zuletzt bearbeitet: 26.11.2015, 20:05 von Glausius.)
Hallo Stefan,
leider auch nach dieser Änderung wird die Datei nicht eingelesen! Du kannst es ja selbst ausprobieren, die entsprechenden Dateien sind ja in meinem Beitrag drin.
Ich muss nicht an dieser Routine "fest kleben", bin auch für jede andere Lösung dankbar, die folgendes abdeckt: 1. Anzeige der csv-Dateien zur Auswahl 2. Einlesen/Kopieren dieser csv-Datei in der das Tabellenblatt ("Konvert") in der bestehenden Erfassungs-Datei.
Die gepostete Routine habe ich in zwei anderen Projekten verwendet und dort gibt er keinerlei Probleme mit dem Einlesen der Daten, allerdings hatten die nur 2 Spalten und bestanden nur aus Zahlenwerten.
Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Registriert seit: 11.04.2014
Version(en): Office 2007
26.11.2015, 20:11
(Dieser Beitrag wurde zuletzt bearbeitet: 26.11.2015, 20:12 von Steffl.
Bearbeitungsgrund: Klammer eingefügt
)
Hallo Günter, ich habe mir die Daten jetzt heruntergeladen und meinen Fehler bemerkt. Ich hatte zu wenig Zeilen geändert (wobei jetzt dann die andere Datei nicht mehr eingelesen werden kann). 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 16) For i = 0 To UBound(varErgebnis) arHilf = Split(varErgebnis(i), ";") If UBound(arHilf) = 16 Then 'aus 15 wurde 16 For j = 0 To 16 ' und auch hier ersetzt die 16 die 15 If IsNumeric(arHilf(j)) Then arData(i, j) = CDbl(arHilf(j)) Else arData(i, j) = arHilf(j) End If Next End If Next Sheets("Konvert").Range("A1").Resize(UBound(arData) + 1, 16) = arData End Sub
Gruß Stefan Win 10 / Office 2016
Registriert seit: 11.04.2014
Version(en): 2021
Hallo Stafan,
ja, jetzt kjlappt es mit der 2. Datei und nicht mehr mit der ersten - ich brauche aber eine variable Lösung, die beide Fälle abdeckt bzw. auch dann läuft, wenn es evtl. wieder Änderungen an den csv- Dateien läuft. Kann man das nicht verallgemeinern? Autonom liest ha Excel anstandslos beide Dateien ein, nur mittels VBA klappt das nicht.
Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Registriert seit: 11.04.2014
Version(en): Office 2007
26.11.2015, 20:57
(Dieser Beitrag wurde zuletzt bearbeitet: 26.11.2015, 21:04 von Steffl.
Bearbeitungsgrund: Codezeile geändert
)
Hallo Günter, versuche es mal damit Code: Sub CSV_Datei_einlesen() Dim lngSpalten As Long Dim strTeil As String 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 strTeil = Left(strInhalt, InStr(strInhalt, vbCrLf)) lngSpalten = Abs(Len(Replace(strTeil, ";", "")) - Len(strTeil)) objTextFile.Close varErgebnis = Split(strInhalt, vbCrLf) ReDim arData(0 To UBound(varErgebnis), 0 To lngSpalten) For i = 0 To UBound(varErgebnis) arHilf = Split(varErgebnis(i), ";") For j = 0 To UBound(arHilf) If IsNumeric(arHilf(j)) Then arData(i, j) = CDbl(arHilf(j)) Else arData(i, j) = arHilf(j) End If Next Next Sheets("Konvert").Range("A1").Resize(UBound(arData) + 1, UBound(arData, 2) + 1) = arData End Sub
Gruß Stefan Win 10 / Office 2016
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Günter,
Steffl hat im code ein 2D-Array gefüllt. Wenn Du flexible Daten hast, die eine unterschiedliche Anzahl Zeilen und Spalten haben können, wäre es von Vorteil, beide Dimensionen variabel zu halten: Sheets("Konvert").Range("A1").Resize(UBound(ardata, 1) + 1, UBound(ardata, 2) + 1) = ardata
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Günter, spaltenunabhängig:
' ************************************************************** ' Modul: csv_Daten Typ = Allgemeines Modul ' **************************************************************
Option Explicit
Sub CSV_Datei_einlesen() Dim arData As Variant Dim arHilf As Variant Dim fdDialog As FileDialog Dim i As Integer Dim j As Integer Dim objTextFile As Object Dim strDatei As String Dim strInhalt As String Dim varErgebnis As Variant 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 IsNumeric(arHilf(j)) Then arData(i, j) = CDbl(arHilf(j)) Else arData(i, j) = arHilf(j) End If Next Next Sheets("Konvert").UsedRange = "" Sheets("Konvert").Range("A1").Resize(UBound(arData, 1) + 1, UBound(arData, 2) + 1) = arData End Sub
Code eingefügt mit: Excel Code JeanieGruß Uwe
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo André, (26.11.2015, 21:03)schauan schrieb: Steffl hat im code ein 2D-Array gefüllt. Wenn Du flexible Daten hast, die eine unterschiedliche Anzahl Zeilen und Spalten haben können, wäre es von Vorteil, beide Dimensionen variabel zu halten: Sheets("Konvert").Range("A1").Resize(UBound(ardata, 1) + 1, UBound(ardata, 2) + 1) = ardata danke für deine Berichtigung, das hatte ich übersehen. :22:
Gruß Stefan Win 10 / Office 2016
Registriert seit: 29.09.2015
Version(en): 2030,5
26.11.2015, 23:16
(Dieser Beitrag wurde zuletzt bearbeitet: 26.11.2015, 23:17 von snb.)
Oder: Code: Sub M_snb() With Application.FileDialog(3) .Filters.Add "CSV-Dateien", "*.CSV" .Title = "Bitte Datei auswählen" If .Show = -1 Then sn = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(.SelectedItems(1)).readall, vbCrLf) End With If IsEmpty(sn) Then Exit Sub Sheets("Konvert").Range("A1").Resize(UBound(sn) + 1) = Application.Transpose(sn) Sheets("Konvert").Range("A1").CurrentRegion.TextToColumns , , , , 0, 0, -1, 0, 0 End Sub
|