Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
676to680
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
676to680
676to680
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

csv Datei öffnen

csv Datei öffnen
10.10.2005 11:59:17
andreas
Hallo,
ich möchte eine csv Datei öffnen deren Inhalt durch Semikolon getrennt ist. Leider habe ich den ganzen Inhalt einer Zeile in der Spalte A.
Der nachstehende Code funktioniert nicht in Excel 2000:
neudatei = Application.GetOpenFilename(filefilter:="Textdateien (*.csv), *.csv")
Workbooks.OpenText Filename:=neudatei, DataType:=xlDelimited, semicolon:=True
Wer weis wie´s geht?
Danke Andreas

30
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: csv Datei öffnen
10.10.2005 12:20:02
bst
Hallo Andreas,
am einfachsten vermutlich so.
cu, Bernd
--
Option Explicit

Sub LiesCSV()
   Dim neudatei, txtdatei$
   
   neudatei = Application.GetOpenFilename(filefilter:="Textdateien (*.csv), *.csv")
   If neudatei = False Then Exit Sub
   txtdatei = Replace(neudatei, ".csv", ".txt")
   FileCopy neudatei, txtdatei
   Workbooks.OpenText Filename:=txtdatei, DataType:=xlDelimited, semicolon:=True
End Sub

Anzeige
AW: csv Datei öffnen
10.10.2005 13:45:27
andreas
Hallo Bernd,
leider nein, dein Vorschlag funktioniert nicht.
Es kommt die Fehlermeldung
Laufzeitfehler 70
Zugriff verweigert.
Danke,
Andreas
AW: csv Datei öffnen
10.10.2005 14:04:44
bst
Hi Andreas,
dann hast Du vermutlich keine Berechtigung in das dortige Verzeichnis zu schreiben.
Versuch's vielleicht mal mit sowas. Passe ggf. die Konstante myTempPath an.
Allerdings ist jetzt der Trick mit dem 'einfach' beinahe den Bach runter :-(
Man könnte darüber nachdenken, die CVS-Datei gleich selber einzulesen ...
HTH, Bernd
--
Option Explicit

Const myTempPath As String = "C:\TEMP"

Sub LiesCSV()
   Dim neudatei, txtdatei$
   
   neudatei = Application.GetOpenFilename(filefilter:="Textdateien (*.csv), *.csv")
   If neudatei = False Then Exit Sub
   txtdatei = GetNewName(CStr(neudatei))
   FileCopy neudatei, txtdatei
   Workbooks.OpenText Filename:=txtdatei, DataType:=xlDelimited, semicolon:=True
End Sub

Function GetNewName(oldname As String) As String
   Dim hilf As String
   If InStrRev(oldname, "\") > 0 Then
      hilf = Mid(oldname, InStrRev(oldname, "\") + 1)
   Else
      If Left(oldname, 2) Like "[A-Za-z]:" Then
         hilf = Mid(oldname, 3)
      Else
         hilf = oldname
      End If
   End If
   GetNewName = myTempPath & "\" & Replace(hilf, ".csv", ".txt")
End Function

Anzeige
AW: csv Datei öffnen
10.10.2005 17:38:20
andreas
Hallo Bernd,
danke für deine Hilfe, leider bekomme ich noch immer alles in der Spalte A.
Andreas
AW: csv Datei öffnen
11.10.2005 07:31:24
bst
Morgen Andreas,
das verstehe ich nicht. Öffnest Du auch die TXT-Datei, nicht die CSV-Datei ?
cu, Bernd
AW: csv Datei öffnen
11.10.2005 10:48:39
andreas
Hallo Bernd,
ich habe deinen Code wie er ist verwendet. Inhalt einer Zeile steht in Spalte A.
In dem Verzeichnis wo diese csv Dateien stehen kann ich diese weder löschen noch verschieben. Wenn ich in Excel diese Datei öffne, wird sie richtig geöffnet. Jeder Eintrag steht in einer eigenen Spalte.
Da ich für meine Kollegen das Öffnen (umständlicher Pfad) und den Inhalt der vielen Spalten zum Weiterbearbeiten einfach darstellen möchte, will ich das Dialog Fenster Öffnen anzeigen lassen (mit richtigen Pfad und csv.Dateien anzeigen), der user wählt die Datei aus, dann werden einige Einträge bestimmter Spalten in ein anderes Excel-Dok. übertragen.
Täglich kommt eine Datei mit einem anderen Namen dazu.
Gibt es dafür einen anderen Zugang?
Danke, Andreas
Anzeige
AW: csv Datei öffnen
11.10.2005 11:30:19
bst
Hi Andreas,
das Problem liegt im Excel VBA. Dort werden beim Öffnen einer CSV-Datei die englischen Trennzeichen benutzt, nicht die Deutschen. Dies passiert wenn Du eine CSV-Datei mit OpenText öffnest oder auch via Explorer eine CSV-Datei mit Doppelklick öffnest.
Siehe: http://support.microsoft.com/default.aspx?scid=kb;de;509480
Beim Öffnen einer TXT-Datei sollte dieses nicht passieren. Deshalb sollte meine Routine eigentlich funktionieren ?
Weitere Möglichkeiten:
- Nach dem (falschen) Einlesen der CSV-Datei nimm Daten-Text in Spalten
- In der Registry den DDE-Befehl fürs Öffnen 'eindeutschen'
http://groups.google.com/group/microsoft.public.de.excel/msg/716b12d1735732ff?hl=de
- Nimm eine QueryTable zum Einlesen (Daten-Externe-Daten-Textdatei importieren)
(zeichne Dir das besser mit dem Rekorder auf)
- Mach's gleich selber im VBA. Solange es sich um 'einfache' Textdateien handelt sollte z.B. sowas wie unten tun.
HTH, Bernd
--
Option Explicit

'
' Öffnet eine CSV-Datei und liest sie in die aktuelle Tabelle ab Zeile 1 Spalte 1
'
' fName = Dateiname & Pfad
' FS = das Spaltentrennzeichen (Field Seperator), im Deutschen ein Semikolon
'
Sub ReadfromCSVSimple(fname As String, Optional FS As String = ";")
   Dim hfile As Integer ' Filehandle bzw. Dateinummer
   Dim i As Long ' Zähler über alle Zeilen
   Dim OneLine As String ' Eine Zeile als String
   Dim myArr As Variant ' eine Zeile in Felder getrennt
   
   hfile = FreeFile
   Open fname For Input As #hfile
   While Not EOF(hfile)
      i = i + 1
      Line Input #hfile, OneLine
      myArr = Split(OneLine, FS)
      With Range(Cells(i, 1), Cells(i, UBound(myArr)))
         .NumberFormat = "@"
         .Value = myArr
      End With
   Wend
   Close #hfile
End Sub

Anzeige
AW: csv Datei öffnen
11.10.2005 11:30:33
bst
Hi Andreas,
das Problem liegt im Excel VBA. Dort werden beim Öffnen einer CSV-Datei die englischen Trennzeichen benutzt, nicht die Deutschen. Dies passiert wenn Du eine CSV-Datei mit OpenText öffnest oder auch via Explorer eine CSV-Datei mit Doppelklick öffnest.
Siehe: http://support.microsoft.com/default.aspx?scid=kb;de;509480
Beim Öffnen einer TXT-Datei sollte dieses nicht passieren. Deshalb sollte meine Routine eigentlich funktionieren ?
Weitere Möglichkeiten:
- Nach dem (falschen) Einlesen der CSV-Datei nimm Daten-Text in Spalten
- In der Registry den DDE-Befehl fürs Öffnen 'eindeutschen'
http://groups.google.com/group/microsoft.public.de.excel/msg/716b12d1735732ff?hl=de
- Nimm eine QueryTable zum Einlesen (Daten-Externe-Daten-Textdatei importieren)
(zeichne Dir das besser mit dem Rekorder auf)
- Mach's gleich selber im VBA. Solange es sich um 'einfache' Textdateien handelt sollte z.B. sowas wie unten tun.
HTH, Bernd
--
Option Explicit

'
' Öffnet eine CSV-Datei und liest sie in die aktuelle Tabelle ab Zeile 1 Spalte 1
'
' fName = Dateiname & Pfad
' FS = das Spaltentrennzeichen (Field Seperator), im Deutschen ein Semikolon
'
Sub ReadfromCSVSimple(fname As String, Optional FS As String = ";")
   Dim hfile As Integer ' Filehandle bzw. Dateinummer
   Dim i As Long ' Zähler über alle Zeilen
   Dim OneLine As String ' Eine Zeile als String
   Dim myArr As Variant ' eine Zeile in Felder getrennt
   
   hfile = FreeFile
   Open fname For Input As #hfile
   While Not EOF(hfile)
      i = i + 1
      Line Input #hfile, OneLine
      myArr = Split(OneLine, FS)
      With Range(Cells(i, 1), Cells(i, UBound(myArr)))
         .NumberFormat = "@"
         .Value = myArr
      End With
   Wend
   Close #hfile
End Sub

Anzeige
AW: Nachtrag
11.10.2005 11:47:35
bst
Nachtrag & Sorry,
Obiges schreibt eine Spalte zuwenig in die Tabelle ...
So sollte es besser funktionieren.
cu, Bernd
--
Option Explicit

'
' Öffnet eine CSV-Datei und liest sie in die aktuelle Tabelle ab Zeile 1 Spalte 1
'
' fName = Dateiname & Pfad
' FS = das Spaltentrennzeichen (Field Seperator), im Deutschen ein Semikolon
'
Sub ReadfromCSVSimple(fname As String, Optional FS As String = ";")
   Dim hfile As Integer ' Filehandle bzw. Dateinummer
   Dim i As Long ' Zähler über alle Zeilen
   Dim OneLine As String ' Eine Zeile als String
   Dim myArr As Variant ' eine Zeile in Felder getrennt
   
   hfile = FreeFile
   Open fname For Input As #hfile
   While Not EOF(hfile)
      i = i + 1
      Line Input #hfile, OneLine
      myArr = Split(OneLine, FS)
      With Range(Cells(i, 1), Cells(i, 1 + UBound(myArr)))
         .NumberFormat = "@"
         .Value = myArr
      End With
   Wend
   Close #hfile
End Sub

Anzeige
AW: Nachtrag
11.10.2005 13:07:35
andreas
Hallo Bernd,
hier musst du mir bitte etwas weiter helfen. Bei mir läuft das nicht so.
Wenn ich den Code genau so verwende komme ich nicht weiter.
Kann ich vorher mit getopenFilename die Datei vom User öffnen lassen (Das ist notwendig) und dann auf Deinen code verweisen?
Da bekomme ich die Meldung "Argument ist nicht optional" (So gut kenn ich mich mit VBA nicht aus)
Danke Andreas
AW: Nachtrag
11.10.2005 13:18:54
bst
Hallo Andreas,
HTH, Bernd
--
Option Explicit

Sub LiesCSV()
   Dim neudatei
   
   neudatei = Application.GetOpenFilename(filefilter:="Textdateien (*.csv), *.csv")
   If neudatei = False Then Exit Sub
   
   ' Bei Bedarf: Neue Tabelle anlegen
   Worksheets.Add
   
   ' LeseFunktion aufrufen
   ReadfromCSVSimple CStr(neudatei)
End Sub

'
' Öffnet eine CSV-Datei und liest sie in die aktuelle Tabelle ab Zeile 1 Spalte 1
'
' fName = Dateiname & Pfad
' FS = das Spaltentrennzeichen (Field Seperator), im Deutschen ein Semikolon
'
Sub ReadfromCSVSimple(fname As String, Optional FS As String = ";")
   Dim hfile As Integer ' Filehandle bzw. Dateinummer
   Dim i As Long ' Zähler über alle Zeilen
   Dim OneLine As String ' Eine Zeile als String
   Dim myArr As Variant ' eine Zeile in Felder getrennt
   
   hfile = FreeFile
   Open fname For Input As #hfile
   While Not EOF(hfile)
      i = i + 1
      Line Input #hfile, OneLine
      myArr = Split(OneLine, FS)
      With Range(Cells(i, 1), Cells(i, 1 + UBound(myArr)))
         .NumberFormat = "@"
         .Value = myArr
      End With
   Wend
   Close #hfile
End Sub

Anzeige
AW: Nachtrag
11.10.2005 15:28:28
andreas
Hallo Bernd,
ich werd verrückt, es funktioniert.
Danke für Deine Geduld.
Honorarforderungen (Wein, Mozartkugeln etc. an: acl@gmx.at
Danke, Andreas
AW: Nachtrag
13.10.2005 10:57:41
Korl
Hallo Bernd,
entschuldige wenn ich mich hier einmische. Ich stehe vor dem gleichen Problem wie Andreas.
Bernd ich habe Dein Code benutzt, er lädt mir aber nur wenige Zeilen und das Debuggen
zeigt mir diese Zeile gelb:
With Range(Cells(i, 1), Cells(i, 1 + UBound(myArr))
Kann es etwas mit den Leerzeilen zu tun haben, die sich in der csv befinden?
Ich hoffe Du schaust hier nochmal vorbei?
Gruß Korl
Anzeige
AW: Nachtrag
13.10.2005 11:12:22
Korl
Hallo,
ja, es hängt mit den Leerzeilen zusammen.
Bernd läßt sich Dein Code daraufhin noch anpassen?
Gruß Korl
AW: Nachtrag
13.10.2005 11:27:10
bst
Hallo Korl,
eigentlich sollten die Leerzeichen keine Rolle spielen.
Ich vermute eher daß Du mehr als 256 Felder in der CSV-Datei hast. Dann geht das so nicht mehr :-(
Schick doch mal bitte Deine CSV-Datei (als Text), dann schaue ich mir an woran's liegt.
Oder versuch's mal hiermit. Ist die 'einfachere' Version von Obigem Teil, welches sich leichter debuggen lassen sollte...
HTH, Bernd
--
Option Explicit

Sub LiesCSV()
   Dim neudatei
   
   neudatei = Application.GetOpenFilename(filefilter:="Textdateien (*.csv), *.csv")
   If neudatei = False Then Exit Sub
   
   ' Bei Bedarf: Neue Tabelle anlegen
   Worksheets.Add
   
   ' LeseFunktion aufrufen
   ReadfromCSVSimple CStr(neudatei)
End Sub

'
' Öffnet eine CSV-Datei und liest sie in die aktuelle Tabelle ab Zeile 1 Spalte 1
'
' fName = Dateiname & Pfad
' FS = das Spaltentrennzeichen (Field Seperator), im Deutschen ein Semikolon
'
Sub ReadfromCSVSimple(fname As String, Optional FS As String = ";")
   Dim hfile As Integer ' Filehandle bzw. Dateinummer
   Dim i As Long ' Zähler über alle Zeilen
   Dim j As Integer ' Zähler über alle Spalten
   Dim OneLine As String ' Eine Zeile als String
   Dim myArr As Variant ' eine Zeile in Felder getrennt
   
   hfile = FreeFile
   Open fname For Input As #hfile
   While Not EOF(hfile)
      i = i + 1
      Line Input #hfile, OneLine
      myArr = Split(OneLine, FS)
      ' With Range(Cells(i, 1), Cells(i, 1 + UBound(myArr)))
      ' .NumberFormat = "@"
      ' .Value = myArr
      ' End With
      For j = 0 To UBound(myArr)
         Cells(i, 1 + j).NumberFormat = "@"
         Cells(i, 1 + j).Value = myArr(j)
      Next
   Wend
   Close #hfile
End Sub


Anzeige
AW: Nachtrag
13.10.2005 11:49:20
Korl
Hallo Bernd,
ich könnte LAUT Juhuuu schreien vor Freude. Es funktioniert mit Deinen letzten gekürzten
Code.
Besten Dank nochmal.
Gruß Korl
AW: Nachtrag
13.10.2005 12:11:34
bst
Hi Korl,
freut mich, daß es nun geht.
Ich hätte aber trotzdem noch gerne gewußt, was zuvor schiefging.
Wie war denn die genaue Fehlermeldung ?
cu, Bernd
AW: Nachtrag
13.10.2005 15:53:59
Korl
Hallo Bernd,
der Debugger sagt Laufzeitfehler 1004.
"Anwendungs- oder objektdefinierter Fehler" und bleibt stehen an der mit xxxx gekennzeichneten Stelle.

Sub ReadfromCSVSimple(fname As String, Optional FS As String = ";")
Dim hfile As Integer ' Filehandle bzw. Dateinummer
Dim i As Long ' Zähler über alle Zeilen
Dim OneLine As String ' Eine Zeile als String
Dim myArr As Variant ' eine Zeile in Felder getrennt
hfile = FreeFile
Open fname For Input As #hfile
While Not EOF(hfile)
i = i + 1
Line Input #hfile, OneLine
myArr = Split(OneLine, FS)
With Range(Cells(i, 1), Cells(i, 1 + UBound(myArr))) xxxxxxxxxxxxxxxxxxx
.NumberFormat = "@"
.Value = myArr
End With
Wend
Close #hfile
End Sub

Einen Wehrmutstropfen habe ich jetzt leider noch feststellen müssen!
Alle Werte werden im Textformat angezeigt.
Läßt sich hier noch was machen?
Gruß Korl
AW: Nachtrag
13.10.2005 16:03:06
bst
Hi Korl,
Wenn der Fehler ansteht, geh mal bitte ins VBA-Direkfenster (STRG-G) und gib dort:
?i, UBound(myArr)
ein. Was steht dann dort ?
Und, das mit dem Text war von mir beabsichtigt. Um Problemen aus dem Weg zu gehen...
Dafür zuständig ist die Zeile:
.NumberFormat = "@"
Wirf sie halt mal raus oder ändere sie in:
.NumberFormat = "General"
cu, Bernd
AW: Nachtrag
13.10.2005 16:39:25
Korl
Hallo Bernd,
das mit den Zahlen haut anscheinend wieder hin, bin immer noch am testen.
Im Direktfenster kommt Laufzeitfehler 13: Typen unverträglich.
Konnte ich Dir hiermit helfen?
Gruß Korl
AW: Nachtrag
13.10.2005 19:48:40
Korl
Hallo Bernd,
Dein Code funktioniert bei mir tadellos.
Nochmals besten Dank für Deine Mühe.
Gruß Korl
AW: Nachtrag
14.10.2005 13:54:57
Korl
Hallo Bernd,
entschuldige, ich muß doch nochmal nachhaken. Ich hatte nun die Gelegenheit unterschiedliche CSV-Dateien einzulesen, dabei viel mir auf das am ende eines String bzw. einer Dezimalzahl und teilweise in leere Zellen Gänzefüsschen hineingesetzt wurden.
Kannst Du Dir das erklären.
Ich hätte jetzt gerne 2 csv-Dateien hochgeladen aber csv-Dateien nimmt der Server nicht.
Gruß Korl
AW: Nachtrag
14.10.2005 14:49:43
bst
Hi Korl,
mache eine Zip-Datei aus Deinen CSV's dann sollte das gehen.
Und, die Einleseroutine von mir ist ziemlich einfach gestrickt.
Mit Anführungszeichen um die Werte herum kommt sie halt nicht zurecht.
Diese stehen aber bereits VOR dem Einlesen in der CSV-Datei, oder ?
FWIW, Excel macht beim Schreiben einer CSV-Datei Anfürungszeichen drumrum wenn:
a) ein solches im Datum selber steht, diese(s) wird/werden dann verdoppelt.
b) ein Feldtrennzeichen (im Deutschen ein Semikolon) im Datum steht
cu, Bernd
AW: Nachtrag
14.10.2005 17:05:45
Korl
Hallo Bernd,
hier meine Zip, es befinden sich zwei csv-Dateien die von unterschiedlichen Programmen erzeugt wurden.
Die Gänsefüßchen sind unterschiedlich in den beiden csv-Dateien vorhanden.
https://www.herber.de/bbs/user/27508.zip
Ich drücke Dir die Daumen, das Du es lösen kannst ;-)
Gruß Korl
AW: Nachtrag
14.10.2005 17:38:42
Korl
Frage noch offen, hatte ich vergessen :-(
AW: Nachtrag
14.10.2005 22:57:47
bst
Abend Korl,
wie ich mir gedacht habe, die "" sind schon in der CSV drinne...
Einfachste Anhilfe: Umbenennen der CSV in was wie TXT und dann OpenText benutzen.
Ansonsten siehe mal hier:
http://www.online-excel.de/fom/fo_read.php?f=3&bzh=195&h=177&ao=1#a123x
Das erste - lange - Teil gehört in ein Klassenmodul mit dem Namen CSVFile.
Wenn Du damit nicht zurecht kommen solltest, gedulde Dich bis Montag.
cu, Bernd
AW: Nachtrag
15.10.2005 00:58:16
Korl
Hallo Bernd,
schön das Du die Ursache finden konntest. Die CSV-Dateien haben doch so ihre Probleme ;-)
Ich habe mich auch in online-excel registrieren lassen und schon mal im Codeprojet Forum hinein geschaut. Für mich als Wochenendbasteler ist mir das doch 3 Nummern zu groß!
Das Klassenmodul habe ich mir angelegt aber mit der Benennung des Klassenmoduls als CSVFile muß ich noch ein bischen gucken.
Bernd hab Dank für Deine Mühe, wünsche Dir ein erholsames Wochenende.
Gruß Korl
AW: csv Datei öffnen
10.10.2005 12:43:59
Uduuh
Hallo,
das kann Excel selbst.
neudatei = Application.GetOpenFilename(filefilter:="Textdateien (*.csv), *.csv")
Workbooks.Open neudatei
Gruß aus’m Pott
Udo

AW: csv Datei öffnen
10.10.2005 12:59:05
bst
Hallo Udo,
nein. In Excel 2000 geht das nicht. Es werden hier die englischen Trennzeichen (,) benutzt, nicht die deutschen Teile (;).
cu, Bernd
AW: csv Datei öffnen
10.10.2005 13:48:24
Andreas
Hallo Udo,
geht leider nicht.
Der Inhalt einer Zeile steht nach wie vor in der Spalte A
Danke,
Andreas

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige