csv in bestehendes Blatt laden

10/12/2009 - 09:49 von Michael Jakobs | Report spam
Moin,

vielleicht hat ja jemand von euch gerade 'ne gute Idee, ich fange
langsam an zu verzweifeln. Für eine aut. Verarbeitung muss ich eine
csv-Datei (mit Semikolon als Trennzeichen) in ein bestehendes
Arbeitsblatt laden.

Dazu habe ich folgenden Codeschnipsel gefunden:

Sub ImportCSV()
Dim Dateiname
Dim Ws As Worksheet
Set Ws = ActiveWorkbook.Sheets("MeinBlatt")
Dateiname = Application.GetOpenFilename("Textdateien,*.csv")
If Dateiname <> False Then
Application.ScreenUpdating = False
Workbooks.Open Filename:=Dateiname
ActiveSheet.UsedRange.Copy Ws.Cells(1)
ActiveWorkbook.Close
Application.ScreenUpdating = True
End If
End Sub

Allerdings erkennt Excel (2003 SP3) dann das Trennzeichen nicht und
importiert nur 4 Spalten, statt der originalen 40. Wenn ich die
csv-Datei über den normalen Öffnen-Dialog öffne funktioniert das ohne
Probleme. Zum Test habe ich den funktionierenden Vorgang per
Makro-Recorder aufgezeichnet. Das aufgezeichnete Makro funktioniert aber
auch nicht :-(.

Testweise habe ich die csv in txt umbenannt (was ich spàter gar nicht
will) und das Öffnen aufgezeichnet. Die Spalten werden kann korrekt
erkannt (man sieht auch um Code, dass die Spalten alle separat definiert
sind), allerdings werden due Umlaute dann nicht mehr korrekt dargestellt.

Grüße
Michael
 

Lesen sie die antworten

#1 Andreas Killer
10/12/2009 - 15:59 | Warnen spam
Michael Jakobs schrieb:

Allerdings erkennt Excel (2003 SP3) dann das Trennzeichen nicht und
importiert nur 4 Spalten, statt der originalen 40. Wenn ich die
csv-Datei über den normalen Öffnen-Dialog öffne funktioniert das ohne
Probleme. Zum Test habe ich den funktionierenden Vorgang per


Hmm, merkwürdig..., tja, ich hab kein XL2003, von daher kann ich dazu
nix sagen.

Aber mit dem Makro kann ich helfen. Du könntest ja die Textdatei
selber einlesen und die Zeilen via "Text in Spalten" auftrennen.

Ob das mit den Umlauten geht weiß ich jetzt so nicht, aber die könnte
man konvertieren. Wenn's da Probleme gibt dann melde Dich nochmal und
sagt was z.B. statt einem à ankommt.

Andreas.

Sub ImportCSV()
Dim Dateiname
Dim S As String, Data As Variant
Dateiname = Application.GetOpenFilename("Textdateien,*.csv")
If Dateiname = False Then Exit Sub
'Datei komplett einlesen
S = ReadTextFile(Dateiname)
'War was drin?
If Len(Trim(S)) = 0 Then Exit Sub
'Zeilen aufsplitten, 2D-Array erstellen
Data = WorksheetFunction.Transpose(Split(S, vbCrLf))
'Zellbereich abmessen
With Range(Cells(1, 1), Cells(UBound(Data), 1))
'Eintragen
.Value = Data
'In Spalten splitten
.TextToColumns Semicolon:=True
End With
End Sub

Private Function ReadTextFile(ByVal FName As String) As String
'Liest eine Textdatei ein
Dim fs As Object, F As Object
Set fs = CreateObject("Scripting.FileSystemObject")
On Error GoTo ExitPoint
Set F = fs.OpenTextFile(FName)
ReadTextFile = F.ReadAll
F.Close
ExitPoint:
End Function

Ähnliche fragen