Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1236to1240
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

CSV-Import über VBA

CSV-Import über VBA
Manuela
Hallo!
Ich bräuchte mal Eure Hilfe. Im Internet hab ich schon div. Makros gefunden, aber irgendwie will es nicht klappen - hmpf :-)
Also:
Ich würde gern über ein VBA Makro mit dem „Öffnen-Dialog“ den Inhalt einer CSV-Datei die mit Semikolons getrennt ist in meine Excelmappe einfügen. Über die Fuktion Makroaufzeichen hab’ ich es schon mehrfach probiert, aber dann wird mir der Inhalt immer nur 1:1 eingefügt. Gibt es eine Möglichkeit die Semikolons als Spalten umzusetzen?
Kurzform:
- Öffnen-Dialog
- CSV Auswählen
- ab Zelle A10 nach unten einfügen
- Semikolons in Spalten umsetzen
- (wäre es Möglich die letzte ausgefüllte Zeile zu suchen und bei der nächsten CSV dort anzuhängen?)
Achja: Ich hab' die Zeilen wo die CSV importiert werden soll formatiert (Größe, Format usw.), daher wäre es gut wenn aus der CSV nur die "werte" importiert werden. Äh..
Ich hoffe ihr könnt mir helfen und es ist nicht zu kompilziert.. ;-)
Lg,
Manuela

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: CSV-Import über VBA
23.11.2011 10:02:13
Rudi
Hallo,
in ein Modul
Sub Datei_Importieren()
Dim strFileName As String, arrDaten, arrTmp, lngR As Long, lngLast As Long
Const cstrDelim As String = ";" 'Trennzeichen
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Title = "Datei wählen"
.InitialFileName = "c:\test\*.csv"  'Pfad anpassen
If .Show = -1 Then
strFileName = .SelectedItems(1)
End If
End With
If strFileName  "" Then
Application.ScreenUpdating = False
Open strFileName For Input As #1
arrDaten = Split(Input(LOF(1), 1), vbCrLf)
Close #1
For lngR = 1 To UBound(arrDaten)
arrTmp = Split(arrDaten(lngR), cstrDelim)
If UBound(arrTmp) > -1 Then
With ActiveSheet
lngLast = .Cells(Rows.Count, 1).End(xlUp).Row + 1
lngLast = Application.Max(lngLast, 10)
.Cells(lngLast, 1).Resize(, UBound(arrTmp) + 1) _
= Application.Transpose(Application.Transpose(arrTmp))
End With
End If
Next lngR
End If
End Sub

Gruß
Rudi
Anzeige
AW: CSV-Import über VBA
23.11.2011 13:18:54
Manuela
Cool! Vielen Dank!
Es funktioniert alles wunderbar, aber ich hätte dennoch eine Frage:
Könntest du mir den Bereich ".InitialFileName =" so anpassen, dass ich zwar den Öffnendialog habe, aber der "Dateiname" nicht belegt ist sondern die Auswahl ob CSV oder Alle Dateien über den Dateityp kommt? Ich hoffe du verstehst mein Problem.. :-)
In einer anderen Exceldatei von mir ist es anders gelöst(siehe unten), aber ich weiß nicht wie ich deins anpassen muss.. :(
Application.GetOpenFilename("Txt Datei (*.txt),*.txt,Alle Dateien (*.*),*.*")
lg
AW: CSV-Import über VBA
23.11.2011 14:46:10
Rudi
Hallo,
so?
  With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Title = "Datei wählen"
.InitialFileName = "c:\test\"  'Pfad anpassen
.Filters.Add "CSV-Dateien", "*.csv", 1
If .Show = -1 Then
strFileName = .SelectedItems(1)
End If
End With

Gruß
Rudi
Anzeige
AW: CSV-Import über VBA
23.11.2011 19:15:47
Manuela
Top, Danke - Du bist mein Held!
Ich habs noch minimal erweitert:

.Filters.Add "CSV-Dateien", "*.csv", 1
.Filters.Add "Alle-Dateien", "*.*", 2
Ich hoffe ich nerv nicht, aber ich hätte da dennoch einen kleinen Wunsch. Hoffe du kannst mir dabei helfen, weil ich aus VBA einfach nicht schlau werde.. ;-/
Also:
Meine Daten werden mit deinem Makro nun immer in die Zellen A10 bis J10 nach unten eingefügt/angehängt. Allerdings hätte ich gern eine Info welche Datensätze aus welcher Datei kommen. Daher die Frage: Wäre es möglich hinter jeden Datensatz in Spalte K den Dateinamen ohne Pfad zu schreieben ("Test.csv")?
Ideal wäre es ja auch, wenn man den Dateinamen von der zuletzt eingespielten Datei, in einer Zelle ausgeben könnte.
Mhhhhhh, ich muss dringend VBA lernen merk ich grad ^.^
lg
Anzeige
AW: CSV-Import über VBA
24.11.2011 11:31:51
Rudi
Hallo,
Sub Datei_Importieren()
Dim strFileName As String, arrDaten, arrTmp, lngR As Long, lngLast As Long
Const cstrDelim As String = ";" 'Trennzeichen
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Title = "Datei wählen"
.InitialFileName = "c:\test\"  'Pfad anpassen
.Filters.Add "CSV-Dateien", "*.csv", 1
.Filters.Add "Alle Dateien", "*.*", 2
If .Show = -1 Then
strFileName = .SelectedItems(1)
End If
End With
If strFileName  "" Then
Application.ScreenUpdating = False
Open strFileName For Input As #1
arrDaten = Split(Input(LOF(1), 1), vbCrLf)
Close #1
For lngR = 1 To UBound(arrDaten)
arrTmp = Split(arrDaten(lngR), cstrDelim)
If UBound(arrTmp) > -1 Then
With ActiveSheet
lngLast = .Cells(Rows.Count, 1).End(xlUp).Row + 1
lngLast = Application.Max(lngLast, 10)
.Cells(lngLast, 1).Resize(, UBound(arrTmp) + 1) _
= Application.Transpose(Application.Transpose(arrTmp))
.Cells(lngLast, Columns.Count).End(xlToLeft).Offset(, 1) = strFileName
'              .Cells(lngLast, Columns.Count).End(xlToLeft).Offset(, 1) _
= Mid(strFileName, InStrRev(strFileName, "\") + 1)
End With
End If
Next lngR
End If
'Sheets(1).Range("A1")=strFileName 'Dateiname in Blatt1!A1
End Sub

Gruß
Rudi
Anzeige
AW: CSV-Import über VBA
24.11.2011 11:46:30
Manuela
Danke! Es funktioniert aber noch nicht ganz.
Der Dateiname steht nun drin, allerdings immer hinter dem letzten Semikolon-Eintrag aus der CSV und nicht wie gewünscht immer in Spalte K. Könntest du mir das nochmal bitte anpassen?
lg
AW: CSV-Import über VBA
24.11.2011 11:58:04
Rudi
Hallo,
.Cells(lngLast, 11) = strFileName
Gruß
Rudi
AW: CSV-Import über VBA
24.11.2011 12:52:29
Manuela
Hallo,
wenn ich deine Code so anpasse:
           With ActiveSheet
lngLast = .Cells(Rows.Count, 1).End(xlUp).Row + 1
lngLast = Application.Max(lngLast, 10)
.Cells(lngLast, 1).Resize(, UBound(arrTmp) + 1) _
= Application.Transpose(Application.Transpose(arrTmp))
'               .Cells(lngLast, Columns.Count).End(xlToLeft).Offset(, 1) = strFileName
'               .Cells(lngLast, Columns.Count).End(xlToLeft).Offset(, 1) _
.Cells(lngLast, 11) = strFileName
= Mid(strFileName, InStrRev(strFileName, "\") + 1)
End With
dann bekomme ich bei der Stelle "= Mid(strFileName" immer einen "Fehler beim Kombilieren: Erwartet Zeilennummer oder Sprungmarke oder Anweisung oder Anweisungsende"
Anzeige
Fehler
24.11.2011 13:03:01
Rudi
Hallo,
  With ActiveSheet
lngLast = .Cells(Rows.Count, 1).End(xlUp).Row + 1
lngLast = Application.Max(lngLast, 10)
.Cells(lngLast, 1).Resize(, UBound(arrTmp) + 1) _
= Application.Transpose(Application.Transpose(arrTmp))
.Cells(lngLast, 11) = strFileName
End With

Gruß
Rudi
Fehler
24.11.2011 13:03:06
Rudi
Hallo,
  With ActiveSheet
lngLast = .Cells(Rows.Count, 1).End(xlUp).Row + 1
lngLast = Application.Max(lngLast, 10)
.Cells(lngLast, 1).Resize(, UBound(arrTmp) + 1) _
= Application.Transpose(Application.Transpose(arrTmp))
.Cells(lngLast, 11) = strFileName
End With

Gruß
Rudi
Anzeige
AW: Fehler
24.11.2011 13:44:25
Manuela
Danke, aber jetzt steht wieder der ganze Pfad in der Zelle und nicht nur der Dateiname.. :-(
AW: Fehler
24.11.2011 14:52:17
Rudi
Hallo,
so schwer ist das doch alles gar nicht.
  With ActiveSheet
lngLast = .Cells(Rows.Count, 1).End(xlUp).Row + 1
lngLast = Application.Max(lngLast, 10)
.Cells(lngLast, 1).Resize(, UBound(arrTmp) + 1) _
= Application.Transpose(Application.Transpose(arrTmp))
.Cells(lngLast, 11) = Mid(strFileName, InStrRev(strFileName, "\") + 1)
End With

Gruß
Rudi
AW: Fehler
24.11.2011 20:49:17
Manuela
Hallo!
Für mich schon... :) Danke!
lg
AW: Fehler
25.11.2011 12:16:42
Manuela
Hallo Rudi,
mir ist soeben aufgefallen, dass die 1. Zeile aus der CSV-Datei gar nicht importiert wird. Könntest du mir nochmal einen Tipp geben?
lg
Anzeige
AW: Fehler
25.11.2011 12:22:31
Rudi
Hallo,
ja, kann ich. Mein Fehler.
For lngR = 0 To UBound(arrDaten)
Gruß
Rudi

120 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige