Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1900to1904
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

Nach Workbooks.OpenText *.csv als Text?

Nach Workbooks.OpenText *.csv als Text?
17.10.2022 18:43:14
Ben.Blake
Das ist ein Nachtrag zu https://www.herber.de/forum/cgi-bin/callthread.pl?index=1902130
Ich bin erst heute dazu gekommen, mir die letzte Antwort anzuschauen und da war der Thread bereits geschlossen - vielleicht kann man das ja nachpflegen?
Ich will hier eine funktionierende Lösung posten, damit das vielleicht jemandem weiterhilft, der das gleiche Problem hat.
Nochmal die Ursprüngliche Frage:
Nach Workbooks.OpenText werden csv's nur noch als Text geöffnet?
Hallo liebe Leute, ich hab mal wieder ein Problem...
Ich lade per Makro Daten aus csv-Dateien. Da dort einige Formatbesonderheiten drin sind (z.B. Hex-Zahlen, die Excel umbaut, wenn es gerade paßt) mit

Workbook.OpenText:
Workbooks.OpenText Filename:=TFPath, StartRow:=2, DataType:=xlDelimited, Semicolon:=True, local:=True, _
FieldInfo:=Array(Array(1, xlGeneralFormat), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, xlTextFormat))
Leider ist es nun so, daß danach plötzlich alle gleichartigen Dateien bis zum Excel-Neustart nur noch als Text ohne Berücksichtigung der Trennzeichen geladen werden, andere csv's werden geöffnet wie immer. Die betreffenden csv-Dateien haben in der ersten Zeile ein "sep=;" stehen - das kommt so aus Geräten und läßt sich nicht ändern. Kann das der Grund sein?
Ich dachte erst, daß es sowas wie eine stillschweigende Modusumstellung wäre und einfach mal im Script im Anschluß die Datei nochmal mit .Open geöffnet, da macht Excel dann aber bereits den gleichen Fehler.
Ich hab sonst nichts gefunden - Ihr seid also meine letzte Hoffnung ;)
Vielen Dank schonmal!
Gruß
Ben
Dateien: https://www.herber.de/bbs/user/155610.xlsm
Beispiele: Userbild
Alles weitere in den Antworten

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nach Workbooks.OpenText *.csv als Text?
17.10.2022 18:44:41
Ben.Blake
Die meisten Antworten waren Nachfragen zum Verständnis, andere waren:
ein Kollege hatte noch die Idee, daß man die Datei als Workaround in einen anderen Dateityp umbenennen kann. Hab ich probiert, hat nicht funktioniert. Auch, diese Datei auf einem anderen Laufwerk (normal über Netzwerk, stattdessen von lokalem Laufwerk) zu importieren hat nichts gebracht. Ich weiß nicht, woher Excel die Unterscheidung treffen kann. Metadaten scheint es bei csvs nicht großartig zu geben und die Dateieigenschaften unterscheiden sich nicht...
Hi,
schau' Dir mal an was jeweils im "Text in Spalten"-Assistent nach einem Import drin steht - meiner Erfahrung nach "merkt" sich Excel die erste Spezifikation und versucht diese dann auf alle weiteren Textimporte anzuwenden. Wenn ich mich recht erinnere wird dann auch das Trennzeichen (Semikolon) ignoriert und ein Komma (weil CSV als Comma Separated Values interpretiert wird) erwartet.
Mein Workaround: alle Dateien nicht als .csv sondern als .txt importieren oder die Daten über ein Array importieren.
VG, Heli
Anzeige
AW: Nach Workbooks.OpenText *.csv als Text?
17.10.2022 19:03:47
Ben.Blake
Ich weiß jetzt nicht, ob es das war, was Heli meinte, aber ich hatte ja bereits versucht, das Dateiformat zu verändern und dann zu importieren - hat nicht funktioniert. Es scheint tatsächlich ein Excel-Bug zu sein, daß nach .OpenText die Standard-Einstellungen verwendet werden und die sind für csv nunmal Komma (ist bei Sprachen, die das Dezimalkomma verwenden Humbug, aber das ist MS doch egal).
Der Workaround ist nun, daß ich eine Funktion geschrieben habe, die den Text zeilenweise einliest, dann die Spalten aufteilt und das als Array ausgibt.
Mit

ArrayVariable = OpenTxtFile(Dateipfad, opt: >StartZeile [1]Spaltentrennzeichen [";"]
läßt sich der Dateiinhalt als Tabelle einer passenden Array- oder Variant-Variable zuweisen. Alles ist erstmal als Text formatiert, Zahlen werden zu Zahlen, wenn sie in eine entsprechend formatierte Zelle eingefügt werden:

Option Explicit
Option Base 1
Public Function OpenTxtFile(TFPath As String, Optional StrtLn As Long = 1, Optional sepStr As String = ";")
'Öffnet Text-Format-Datei, beginnend bei StrtLn und teilt die Daten entsprechend sepStr zur Umgehung des .OpenText-Bugs
'setzt Option Base 1 voraus
Dim strLn As String, CntL As Long
Dim RowArr() As String, ColArr() As String
Dim TMPArr() As String
Dim i&, j&, b As Long
Dim cCols As Integer
Open TFPath For Input As #1
Do While Not EOF(1)
CntL = CntL + 1
ReDim Preserve ColArr(CntL)
Line Input #1, strLn 'Zeilenweise einlesen
ColArr(CntL) = strLn 'Zeile einem SpaltenArray zuweisen
Loop
Close #1
For i = 1 To UBound(ColArr, 1)
cCols = UBound(Split(ColArr(i), sepStr), 1) + 1 'Achtung, Split gibt immer Array mit Base 0 aus!!!
b = WorksheetFunction.Max(b, cCols)
Next i
ReDim TMPArr(UBound(ColArr, 1) - (StrtLn - 1), b)
For i = 1 To UBound(ColArr, 1) - (StrtLn - 1)
RowArr = Split(ColArr(i + (StrtLn - 1)), sepStr)
For j = 1 To UBound(RowArr, 1) + 1 'wg. Split-Array Base 0
TMPArr(i, j) = RowArr(j - 1)
Next j
Next i
OpenTxtFile = TMPArr
End Function
Da ich die Angewohnheit habe, immer mit Option Base 1 zu arbeiten, war hier noch ein Workaround notwendig, weil die Split-Funktion anscheinend immer ein Base-0-Arrays ausgibt
Ich weiß jetzt nicht, ob es vielleicht einen eleganteren Weg gäbe, das funktioniert jedenfalls.
Vielen Dank an alle, die versucht haben, mir zu helfen!
Gruß
Ben
Anzeige
AW: Nach Workbooks.OpenText *.csv als Text?
18.10.2022 09:57:39
Heli
Hi,
bin auch auf keine andere Lösung gekommen als solche Dateien zeilenweise einzulesen gerade wenn es um "Sonderformate" geht - sieht bei mir in etwa so aus:

intFile = FreeFile
Open strDatei For Binary As #intFile
strInhalt = Space$(LOF(intFile))
Get #intFile, , strInhalt
arrBasis = Split(strInhalt, vbCrLf)
Close #intFile
Und danach durchlaufe ich das Array um nur die relevanten Daten rauszuholen.
VG, Heli.

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige