Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

? CSV-Dateien per VBA-Makro oeffnen

702 views
Skip to first unread message

Volker Gelmroth

unread,
Feb 13, 2001, 6:31:51 AM2/13/01
to
Hallo,
bei der Arbeit stehe ich vor dem Problem, per Makro eine *.CSV-Datei
einzulesen. Im Gegensatz zum "händischen" Öffnen/Einlesen werden die
Daten sowohl bei VBA-Open als auch bei -OpenText pro Zeile in die Zellen
der ersten Spalte gesetzt und nicht separiert.
Gibt es da einen Kniff?
Danke

Robert Feldmann

unread,
Feb 13, 2001, 3:08:29 PM2/13/01
to
Hallo Volker,

wenn der Rest des Makros schon steht, ändere die Endung von csv auf
z.B. txt. Bei csv glaubt Excel besser zu wissen was zu tun ist. Leider
wendet Excel daraufhin die US Einstellungen an. Also Komma als
separator und Punkt als Dezimaltrenner.

Volker Gelmroth schrieb:

--
bis dann,
Robert

Nicht was Du sagst ist entscheidend,
sondern was verstanden wird.


Volker Gelmroth

unread,
Feb 14, 2001, 5:42:23 AM2/14/01
to
Robert Feldmann schrieb:

Hallo Robert,


> wenn der Rest des Makros schon steht, ändere die Endung von csv auf
> z.B. txt.
Du meinst, ich sollte die Datei in *.TXT umbenamsen?

> Bei csv glaubt Excel besser zu wissen was zu tun ist. Leider
> wendet Excel daraufhin die US Einstellungen an. Also Komma als
> separator und Punkt als Dezimaltrenner.

Leider funzt die Sache weiterhin weder mit Open noch OpenText, auch wenn
ich, wie Du rätst, als Separator Komma definiere:

Workbooks.OpenText FileName:=dateiname, comma:=True

Workbooks.Open FileName:=dateiname, ReadOnly:=True, Format:=2

Es ist zum Verrücktwerden ...

Thomas Korn-Twickler

unread,
Feb 15, 2001, 11:03:04 AM2/15/01
to
Hallo,

ich bin ja froh, dass ich damit nicht allein bin: Ich stehe vor demselben Problem
wie Volker; das "witzige" bei mir ist, dass original derselbe Code mal
funktioniert (d. h. die Datei wird in die Felder aufgeteilt) und mal nicht. Ein
vorhersagbares Verhalten ist mir dabei noch nicht gelungen.

Ich versuche, eine mit Semikolon getrennte CSV-Datei mit
Workbooks.Open Filename:=csvDateiname, Format:=4
zu Öffnen.
Ich wäre um Anregungen dankbar.

Thomas Korn-Twickler

-----Originalnachricht-----

.

Robert Feldmann

unread,
Feb 15, 2001, 3:23:32 PM2/15/01
to
Hallo Volker (bitte im thread bleiben), Thomas,

das Thema CSV ist nicht in einem Satz erklärt. Zumal die Probleme bei
euch unterschiedlich liegen können.

Ich glaube daher nicht das wir das Problem in einem thread lösen
können. Ich schreibe mal alles hier rein was es dazu zu sagen gibt.
Dann kann sich jeder raussuchen was er brauchen kann. Sollten weiter
Fragen oder hilfen nötig sein können wir ja auf PM wechseln. Das
dürfte für den Rest der Gemeinde dann nicht mehr interessant sein.

Fragen an Volker und Thomas:
Wie liegt die Datei vor?
Welcher Separator ist verwendet worden?
Willst Du die Datei per Makro öffnen?
Willst Du die Datei bzw. Pfad wählen können?

Volker Gelmroth schrieb:


>
> Robert Feldmann schrieb:
>
> Hallo Robert,
>
> > wenn der Rest des Makros schon steht, ändere die Endung von csv auf
> > z.B. txt.
> Du meinst, ich sollte die Datei in *.TXT umbenamsen?

Ja, zumindest wenn eine echte csv vorliegt und Du diese per Makro
öffnen willst.

>
> > Bei csv glaubt Excel besser zu wissen was zu tun ist. Leider
> > wendet Excel daraufhin die US Einstellungen an. Also Komma als
> > separator und Punkt als Dezimaltrenner.
>
> Leider funzt die Sache weiterhin weder mit Open noch OpenText, auch wenn
> ich, wie Du rätst, als Separator Komma definiere:

Nein, ich rate nicht das Komma als separator zu definieren, ich sagte
das Excel bei makrogesteuertem Öffnen von solchen Dateien davon
ausgeht. (zumindest wollte ich das sagen)

>
> Workbooks.OpenText FileName:=dateiname, comma:=True
>
> Workbooks.Open FileName:=dateiname, ReadOnly:=True, Format:=2
>

Hier fehlt sicher noch ein wenig. Mein Code zum Öffnen einer
Kommaseparierten Datei sieht so aus.

' hier wird die Datei ausgewählt
Quelldatei = Application.GetOpenFilename _
("csv-Dateien(*.csv),*.csv,alle Dateien (*.*),*.*", , _
"Bitte wählen Sie die Quelldatei:", , False)
' Wenn Abbruch gewählt wurde, ENDE.
If Quelldatei = "Falsch" Then Exit Sub
' Umbenennen der ausgewählten Datei. Wird nur um .txt erweitert.
Name Quelldatei As Quelldatei & ".txt"
' Damit der Import im Kommaformat funktioniert.
' Wenn die Datei nur auf csv endet glaubt VBA besser zu wissen wie
das einzulesen ist.
' Außderdem wird die Datei dadurch beim nächsten mal nicht
angezeigt, bleibt aber als Archiv.

Wie gesagt, ich benenne die Datei erst um und öffne dann wie folgt.

Workbooks.OpenText _
FileName:=Quelldatei & ".txt", _
DataType:=xlDelimited, _
Origin:=xlWindows, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=True, _
Tab:=False, _
Semicolon:=False, _
Comma:=True, _
Space:=False, _
Other:=False, _
FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4,
2), Array(5, 2), Array(6, 2), Array(7, 2))

Die Fieldinfo legt das Format der Spalten fest. Mußt Du natürlich
anpassen. Solltest Du zuviele Spalten einlesen wollen wird die Zeile
für VBA zu lang. Dann mußt Du das über eine Arrayvariable lösen. Da
steht dann statt FieldInfo:=Array(Array(1, 2),.... nur
FieldInfo:=Variable() und Du mußt eine Function bauen die etwa so
aussieht.

Public test3(90, 1)
Public i, a

Function Variable()
For i = 0 To 90
test3(i, 0) = i + 1
test3(i, 1) = 2
Next
test = test3
End Function

Damit kannst Du dann warscheinlich auch Daten einlesen die 255 Spalten
nutzen. (Wer hat sowas schon)

Da bei mir die Daten Kommasepariert vorliegen und die Zahlen einen
Punkt als Trennzeichen haben fehlt noch folgendes:

' Damit aus 32.32 nicht 3232 wird muß ein Dezimaltrenner her.
' Das geht durch Tauschen von Punkt gegen Punkt. Logisch? Nein, MS.
ActiveSheet.UsedRange.Replace What:=".", Replacement:=".",
LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False

So, wenn jetzt noch Fragen sind, hier gleich die Gegenfrage: Sind die
Daten Sensibel? Oder kannst Du mir ein Beispiel senden. (gilt im
Prinzip alles auch für Thomas.

Volker Gelmroth

unread,
Feb 17, 2001, 5:29:02 AM2/17/01
to Thomas Korn-Twickler
Thomas Korn-Twickler schrieb:

Moin Thomas,

> Ich versuche, eine mit Semikolon getrennte CSV-Datei mit
> Workbooks.Open Filename:=csvDateiname, Format:=4

Ich habe echt 'ne Weile 'rumprobiert. Und habe nun folgenden Code
eingebaut, der funzt:

dateicsv = "datei.csv" ' Der Name der CSV-Datei
dateitxt = "datei.txt" ' Der Name einer TXT-Datei
Name dateicsv As dateitxt ' Umbenennen der Datei
Workbooks.OpenText dateitxt, DataType:=xlDelimited, Semicolon:=True
' Einlesen

Offenbar klappt der Kram nur bei TXT-Dateien ... hat den Nebeneffekt,
daß man die Dateien auch nicht wiederholt einlesen kann, da sie nach
Ablauf des Makros umbenannt sind.

0 new messages