Registriert seit: 11.04.2014
Version(en): 2021
26.11.2015, 16:58
(Dieser Beitrag wurde zuletzt bearbeitet: 26.11.2015, 18: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, 19:05
(Dieser Beitrag wurde zuletzt bearbeitet: 26.11.2015, 19: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, 19:11
(Dieser Beitrag wurde zuletzt bearbeitet: 26.11.2015, 19: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, 19:57
(Dieser Beitrag wurde zuletzt bearbeitet: 26.11.2015, 20: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 Jeanie
Gruß Uwe
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo André,
(26.11.2015, 20: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, 22:16
(Dieser Beitrag wurde zuletzt bearbeitet: 26.11.2015, 22: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
|