588 Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.2k Punkte)
Hallo,

ich liste aus einem als "variant" dimensioniertem Array Daten (bestehend aus alphanum. und numerischen Einträgen) in eine Tabelle. Die ausgegebenen Daten haben das Format "Variant/Object/Range".
Da ich die Daten, die ursprünglich Werte waren bevor sie in das Array eingelesen wurden später summieren muß, habe ich folgenden Code versucht:
For Each cell In Range(Cells(2, 4), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 6))
cell = CDbl(cell)
ActiveCell.NumberFormat = "General"
Next

Das bewirkt zwar, dass jetzt im Überwachungsfenster der Typ mit "double" angegeben wird, ich aber die Daten trotzdem nicht addieren kann. Lediglich die manuelle Fehlerbehandlung "..in Werte umwandeln" hilft.
Wie kann ich das mit einem Code hinkriegen???
Danke für euren Tipp.
Gruß A.

3 Antworten

0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo,

ich habe eine Beispieldatei einmal zum Hochladen.
http://www.xup.in/dl,18095588/Mappe6.xlsx/
Es geht um die Spalten D und E, die ich zuvor mit der Formel in das Array geladen habe:
arrSpeicher(4, lngZähler) = Cells(i, 12) - Cells(i, 15)

Gruß A.
0 Punkte
Beantwortet von
Hallo Andreas,

Normalerweise ist die Value-Eigenschaft die Standardeigenschaft und braucht
richtigerweise nicht angegeben zu werden. Das Problem in diesem speziellen Fall
ist, dass du diesmal durch Weglassen der Eigenschaft lediglich die selbst
definierte Variable Cell in den Typ Double umwandelst. Da sie nun kein Range
mehr ist, verliert sie den Bezug zur eigentlichen Zelle und enthält jetzt nur noch den
Wert als Standardvariable. Durch Next wird sie dann wieder zum Range der
nächsten Zelle.

Auch wenn es vielleicht lapidar klingt. Versuch mal ob's klappt, wenn du die Value-
Eigenschaft hinzufügst. Dann sollte auch die eigentliche Zelle in Double
umgewandelt werden und deine Berechnung wieder funktionieren.

For Each cell In Range(Cells(2, 4), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 6))
cell.value = CDbl(cell)
ActiveCell.NumberFormat = "General"
Next


Zwei Kleinigkeiten sind mir noch aufgefallen. Schau mal drüber:
- Obwohl es auch so klappt, würde ich die Zeile Numberformat lieber vor die
Typumwandlungszeile setzen um den Code noch übersichtlicher zu gestalten und
die Funktionalität zu gewährleisten.
- Außerdem willst du sicher nicht ActiveCell.Numberformat sondern nur
Cell.Numberformat machen, oder?

Gruß Mr. K.
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hall Mr. K,
Vielen Dank für deine guten und hilfreichen Hinweise, die mein Problem gelöst haben.
VG Andreas
...