Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1652to1656
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
Variant Wert (variable) in Double schreiben
03.11.2018 19:17:29
Phil
Hi zusammen,
ich habe im Thread zuvor "Listbox mit Objekt befüllen" von Onur ein super Lösung bekommen, hierzu nochmals danke.
Die Lösung hat die Werte (Preise), welche in eine Listbox geschrieben werden, mit einer Variable vom TYP "Variant" benutzt.
Nun möchte ich gerne die Listbox auslesen (alle GesamtPreise) und diese in eine Variable vom Typ Double schreiben, damit ich den Gesamtbetrag ausgeben lassen kann.
Da es momentan vom Typ Variant ist, werden alle Werte nebeninander dargestellt und nicht zusammen gerechnet, wenn ich die Schleife so darstelle:
   Dim q As Integer
Dim intSum As Variant
With libAuswertung
For q = 0 To .ListCount - 1
intSum = intSum + .List(q, 2)
Next
End With
txtGesamtbetrag.Value = intSum

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variant Wert (variable) in Double schreiben
03.11.2018 19:27:16
Ralf
Hi Phil,
wenn intSum schon ein Double sein soll, dann solltest Du sie auch als Double deklarieren.
Also, statt
Dim intSum as Variant

so:
Dim dblSum as double
Und in der Schleife (unter der Prämisse, dass sicher ist, dass .List(q,2) auch numerisch ist so:
dblSum = dblSum + Cdbl(.List(q,2))

AW: Variant Wert (variable) in Double schreiben
03.11.2018 19:27:41
Daniel
Hi
naja, die Listbox enthält grundsätzlich Texte und wenn "+" in Kombination mit Texten steht, dann interpretiert VBA das "+" nicht als Anweisung zum Addieren von Zahlen (welche auch, sind ja keine da) sondern zum Verketten von Texten (also wie ein "&")
du solltest hier also die Texte explizit in Zahlen wandeln, da VBA keinen Grund sieht dies implizit zu tun:
ggf reicht es ja aus, inSum nicht als Variant, sondern als double zu deklarieren, dann weiß VBA beim "+", dass Zahlen gemeint sind.
Wenn du beim Variant bleiben willst oder das nicht funktioniert, dann musst du den Listboxwert explizit in eine Zahl wandeln:
intSum = intSum + CDbl(.List(q, 2))
Gruß Daniel
Anzeige
AW: Variant Wert (variable) in Double schreiben
03.11.2018 19:38:08
Phil
Danke euch beiden.
Habe ich bereits getestet. Wenn ich z.B. die Variable intSum als DOuble deklariere, dann bekomme ich eine Meldung "Typen unverträglich".
---
Wie kann ich die Werte in der Listbox in Zahlen wandeln?
AW: Variant Wert (variable) in Double schreiben
03.11.2018 19:41:55
Daniel
Die Antwort auf deine Letzte Frage findest du sowohl in meiner Antwort als auch in der Antwort von Ralf Anton.
Gruß Daniel
AW: Variant Wert (variable) in Double schreiben
03.11.2018 19:49:21
Phil
Naja, ich habe eure Antworten natürlich gelesen und auch umgesetzt. Ich habe dies auch davor schon getestet, allerdings ohne Erfolg.
Wenn ich die Variable als Double deklariere, bekomme ich eine unverträglichkeit als Fehler.
Wenn ich die Variable als Variant deklariere, schluckt er es, schreibt es aber nebeneinander. Dies hast du mir bereits erklärt, da er das + nicht mit Zahlen in Verbindung bringt.
Auch wenn ich den Befehl von dir:
dblSum = dblSum + CDbl(.List(q, 2))
mit CDbl davor einsetze, bekomme ich eine unverträglichkeit als Fehlermeldung.
Anzeige
AW: Variant Wert (variable) in Double schreiben
03.11.2018 19:58:23
UweD
Hallo
dann ist in (.List(q, 2)) keine Zahl, sondern Text.
Beispiel?
LG UweD
AW: Variant Wert (variable) in Double schreiben
03.11.2018 20:11:47
Phil
https://www.herber.de/bbs/user/125095.xlsm
Hier eine Beispiel Datei. Genau diese Werte aus der Listbox sollen übernommen werden.
Es gibt momentan noch kein Textfeld in dieser TestDatei, welche befüllt werden soll.
AW: Variant Wert (variable) in Double schreiben
03.11.2018 20:56:28
Daniel
HI
naja, wenn es noch kein Textfeld gibt, das befüllt werden soll, dann gibts ja auch kein Problem.
nur so als Tipp: da du uns nicht für unsere Hilfe die wir dir geben, bezahlts, solltest du uns das Leben so einfach wie möglich machen, dh wir sollten den Fehler, den du bekommst, nachvollziehen können, ohne das wir an der Datei oder am Code noch irgendwas verändern müssen.
da du den Fehler ja offensichtlich bekommen hast, muss es auch eine Dateiversion geben, die die Textbox und den Fehler enthält, warum lädst du die nicht hoch?
Gruß Daniel
Anzeige
AW: Variant Wert (variable) in Double schreiben
03.11.2018 21:04:54
Phil
Hi Daniel,
hast du Recht, hier die angepasste Version, mit der Textbox, welche den Betrag ausgeben soll:
https://www.herber.de/bbs/user/125097.xlsm
Mit folgenden Code werden mir die Zahlen vor dem Komma zusammen gerechnet, allerdings nicht die Nachkommastellen:
  Dim iX As Integer
Dim dSumme As Double
For iX = 0 To libAuswertung.ListCount - 1
dSumme = dSumme + Val(libAuswertung.List(iX, 2))
Next iX
txtGesamtbetrag.Value = VBA.Format(dSumme, "#,##0.00 €")

AW: Variant Wert (variable) in Double schreiben
03.11.2018 21:17:19
Daniel
Hi
VAL wandelt, wenn ein Text mit Ziffern anfängt, die Ziffern bis zum ersten Textzeichen in Zahlen um.
Allerdings verwendet VAL immer das amerikanische Zahlenformat für die Umwandlung an, dh es erwartet den Punkt als Dezimalzeichen und das Komma ist hier dann das erste Textzeichen. Daher werden nur die Werte vor dem Komma berücksichtigt
CDbl wandelt die Texte zwar nach deutschem Zahlenformat in Zahlen um, erwartet aber dass der komplette Text wie eine Zahl aussieht und steigt ansonsten mit einem Fehler aus.
Ebenso erkennt CDbl nicht den Leerstring als wandelbare Zahl (0) an, sondern steigt hier eben falls mit einem Fehler aus.
Daher sollte man die Umwandelfunktion CDbl immer absichern:
If IsNumeric(libAuswertung.List(iX, 2)) then dSumme = dSumme + Val(libAuswertung.List(iX, 2))

Gruß Daniel
Anzeige
AW: Variant Wert (variable) in Double schreiben
03.11.2018 21:37:10
Phil
Danke dir für die ausführliche Erklärung. Die Lösung in diesem Fall habe ich wie von "Onur" vorgeschlagen angewandt.
AW: Variant Wert (variable) in Double schreiben
03.11.2018 21:38:20
Phil
Manchmal sieht man den Wald vor lauter Bäumen nicht ;-)...
Auf diese Idee, es in der Schleife einzubauen bin ich noch nicht wirklich gekommen. Habe es nun eingebaut und es funktioniert perfekt.
Danke dir ;-).
Grüße Phil

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige