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.
> 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 ...
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-----
.
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.
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.