dedalus2011
Goto Top

Vba skript zum einlesen von textdateien in excel tabellen

Hallo,

es sollen mehrere Zahlen aus einer textdatei in einer excel tabelle eingefügt werden. es klappt soweit, dass alle zahlen (mit tausendtrennzeichen oder kommatrennzeichen) korrekt in der tabelle geschrieben werden, bis auf einem bestimmten zahlenformat. Alle Zahlen die mit [1-9] anfangen und gefolgt von einer Komma sind werden beim einfügen in der entsprechenden zelle automatisch umgewandelt (z.B. 3,0195 -> 301.950 )

In vba skript habe ich folgendes probiert:

1)
 wksZ.Cells(Cell1+ 2, Cell2 + 1).Value =Replace(3,0195, "0,", "0.", 1, 1, 2)   

2)
 For Each xCell In Selection
       xCell.Value = xCell.Value
    Next xCell 

3)
  Cells.NumberFormat = ""   

Klappt aber nicht

Für alle anderen Zahlenformate schon (0 gefolgt von einer komma, 2 oder mehrere Zahlen gefolgt von einer komma etc).

Mit folgendem Ausdruck konnte ich die Zeilen identifizieren, die automatisch konvertiert werden

 if RegexContains(Array(Values), "^([1-9])(,)") = True Then   
wksZ.Cells(Cell1+ 2, Cell2 + 1).Value = " ' " + Array(Values)   
- hier werden die Zahlen zunächst im stringformat in der excel tabelle importiert

Habe dann mit

 For Each xCell In Selection
       xCell.Value = xCell.Value
    Next xCell 

probiert, um die Strings wieder in Zahlenformat zu konvertieren, die Strings werden aber dann wieder falsch formatiert (z.B. 3,0195 -> 301.950 )

Freue mich über jeden Hinweis

Grüße
dedalus2011

Content-ID: 183555

Url: https://administrator.de/contentid/183555

Ausgedruckt am: 24.11.2024 um 09:11 Uhr

mak-xxl
mak-xxl 15.04.2012 um 19:24:01 Uhr
Goto Top
Moin dedalus2011,

Zitat von @dedalus2011:
... Alle Zahlen die mit [1-9] anfangen und gefolgt von einer Komma sind [...] automatisch umgewandelt (z.B. 3,0195 -> 301.950 )
 wksZ.Cells(Cell1+ 2, Cell2 + 1).Value =Replace(3,0195, "0,", "0.", 1, 1, 2)   

In der Zeile, wo der String eingelesen wird, der angenommen in der Variable 'strToken' steht, dann passiert das bei Dir etwa so:

wksZ.Cells(Zeile, Spalte).Value = strToken          ' das Einlesen eines Strings

Das müsste geändert werden in:

wksZ.Cells(Zeile, Spalte).Value = CDbl(strToken)    ' das Einlesen eines in ein Zahlenformat gewandelten Strings

Der Typ der Wandlung ist Dir freigestellt (siehe VBA-Hilfe). Nachträgliches Ändern bringt da aber wenig (wenn also das Kind schon in den Brunnen gebrochen ...)

Freundliche Grüße von der Insel - Mario
dedalus2011
dedalus2011 15.04.2012 um 19:56:34 Uhr
Goto Top
Moin mak-xxl,

klappt leider nicht..Gibt die ganze Zahl raus (in dem Fall wäre das eine "3" statt "3,0195") . Habe auch CDbl(" ' " & (Array(Values)) probiert. Dann kommt der "Type mismatch Error". und ich habe das gleiche Problem wie früher..

Grüße

dedalus2011
mak-xxl
mak-xxl 15.04.2012 um 20:03:42 Uhr
Goto Top
Moin dedalus2011,

um das Problem einzukreisen, versuche vor dem Einlesen ein

MsgBox CDbl(strToken)

Wenn hier auch ein Fehler erzeugt wird, dann poste bitte den Inhalt der Variable in diesem Moment.

Freundliche Grüße von der Insel - Mario
dedalus2011
dedalus2011 15.04.2012 um 20:11:21 Uhr
Goto Top
Moin mak-xxl,

kommt 3,01950 raus. D.h. der Wert wird in der Tabellenzelle umgewandelt (3,01950 -> 3), wie oben beschrieben.

Grüße

dedalus2011
mak-xxl
mak-xxl 15.04.2012 um 20:20:23 Uhr
Goto Top
Zitat von @dedalus2011:
kommt 3,01950 raus. D.h. der Wert wird in der Tabellenzelle umgewandelt (3,01950 -> 3), wie oben beschrieben.

Du schriebst erst, da käme ein Fehler - ja, bei dem Array-Konstrukt mit vorgeschaltetem Hochkomma ...

Die soeben beschriebene 'Umwandlung' rührt daher, dass die Zelle das falsche Format hat (evtl. Ganzzahl) - hier solltest Du entsprechend formatieren.

Freundliche Grüße von der Insel - Mario