Evaluate mit Dezimalzahlen Laufzeitfehler
Hallo zusammen,
ich möchte über ein Userform einen Einkaufspreis errechnen lassen.
Listenpreis
+/- Betrag 1
+/- Betrag 2
+/- Betrag 3
Die Operatoren + oder - möchte ich frei vergeben
Die Parameter % oder € möchte ich auch frei vergeben
Das Makro soll dann
a.) die entsprechend errechneten Beträge unter den Listenpreis schreiben
b.) ganz unten die Summe der Beträge ermitten
c.) den Nettopreis ermitteln
Mit dem Makro (siehe unten) funktioniert das auch.
Allerdings nur bei ganzen Zahlen. Sobald ein Dezimalwert ermittelt wird, bekomme ich einen Laufzeitfehler (Typenkonflikt).
Hier der bisherige Code
(ich weiß, dass das viele von euch tausend mal eleganter progammieren können,
aber ich muss auch "nur" wissen, wie ich den Code für Dezimalwert-Berechnungen erweitern kann)
Vielen Dank im Voraus.
LG
ich möchte über ein Userform einen Einkaufspreis errechnen lassen.
Listenpreis
+/- Betrag 1
+/- Betrag 2
+/- Betrag 3
Die Operatoren + oder - möchte ich frei vergeben
Die Parameter % oder € möchte ich auch frei vergeben
Das Makro soll dann
a.) die entsprechend errechneten Beträge unter den Listenpreis schreiben
b.) ganz unten die Summe der Beträge ermitten
c.) den Nettopreis ermitteln
Mit dem Makro (siehe unten) funktioniert das auch.
Allerdings nur bei ganzen Zahlen. Sobald ein Dezimalwert ermittelt wird, bekomme ich einen Laufzeitfehler (Typenkonflikt).
Hier der bisherige Code
(ich weiß, dass das viele von euch tausend mal eleganter progammieren können,
aber ich muss auch "nur" wissen, wie ich den Code für Dezimalwert-Berechnungen erweitern kann)
Sub NettoEKPreisBerechnen()
If Me.LSListenpreis = "" Then
Exit Sub
Else
Listenpreis = Me.LSListenpreis
NettoEKPreis = Me.LSNettopreis
End If
RZ1_Op = Me.LSRabattZuschlag1Op 'Operator +/-
RZ2_Op = Me.LSRabattZuschlag2Op 'Operator +/-
RZ3_Op = Me.LSRabattZuschlag3Op 'Operator +/-
RZ1 = Me.LSRabattZuschlag1 'Wert
RZ2 = Me.LSRabattZuschlag2 'Wert
RZ3 = Me.LSRabattZuschlag3 'Wert
RZ1_Pa = Me.LSRabattZuschlag1Par 'Parameter % oder €
RZ2_Pa = Me.LSRabattZuschlag2Par 'Parameter % oder €
RZ3_Pa = Me.LSRabattZuschlag3Par 'Parameter % oder €
'Rabatt oder Zuschlag 1 berechnen
If RZ1_Pa = "%" Then
RZ1_Wert = Listenpreis * (RZ1 / 100)
Else
RZ1_Wert = RZ1 'nur den €-Wert übernehmen, da dieser vom Listenpreis ja nur abgezogen werden muss.
End If
'Rabatt oder Zuschlag 2 berechnen
If RZ2_Pa = "%" Then
RZ2_Wert = Listenpreis * (RZ2 / 100)
Else
RZ2_Wert = RZ2 'nur den €-Wert übernehmen, da dieser vom Listenpreis ja nur abgezogen werden muss.
End If
'Rabatt oder Zuschlag 3 berechnen
If RZ3_Pa = "%" Then
RZ3_Wert = Listenpreis * (RZ3 / 100)
Else
RZ3_Wert = RZ3 'nur den €-Wert übernehmen, da dieser vom Listenpreis ja nur abgezogen werden muss.
End If
'Vorzeichen ändern, wenn der Operator "-" ist
'ist notwendig, um die Summe der 3 oben berechneten Werte zu ermitteln
If RZ1_Op = "-" Then
Me.LSRabattZuschlag1Wert = RZ1_Wert * -1
Else
Me.LSRabattZuschlag1Wert = RZ1_Wert
End If
If RZ2_Op = "-" Then
Me.LSRabattZuschlag2Wert = RZ2_Wert * -1
Else
Me.LSRabattZuschlag2Wert = RZ2_Wert
End If
If RZ3_Op = "-" Then
Me.LSRabattZuschlag3Wert = RZ3_Wert * -1
Else
Me.LSRabattZuschlag3Wert = RZ3_Wert
End If
'Berechnen der Summe der ermittelten Beträge
Me.LSRabattZuschlagWertSum = Application.Evaluate(0 & RZ1_Op & RZ1_Wert & RZ2_Op & RZ2_Wert & RZ3_Op & RZ3_Wert)
'Netto Einkaufspreis ermitteln
NettoEKPreis = Application.Evaluate(Listenpreis & LSRabattZuschlagWertSum)
Me.LSNettopreis = NettoEKPreis
End Sub
Vielen Dank im Voraus.
LG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1288363765
Url: https://administrator.de/contentid/1288363765
Ausgedruckt am: 22.11.2024 um 03:11 Uhr
3 Kommentare
Neuester Kommentar
Wenn du die Zahlen mit Komma eingibst musst du diese im Code in Punkte umwandeln, oder direkt in den Textfeldern Punkte statt Komma als Dezimaltrenner verwenden.
VBA rechnet im Hintergrund mit Punkten als Dezimaltrenner nicht mit Kommas ...
VBA rechnet im Hintergrund mit Punkten als Dezimaltrenner nicht mit Kommas ...
Hallo,
warum rechnest du die Summe über "Application.Evaluate"?
Wenn hier eine Zeichenfolge ensteht, die sich nicht auflösen läßt, kommt auch ne Fehlermeldung.
(Zum Beispiel wenn ein Scherzkeks bei den Werten auch ein Minus eingibt)
Ich bin schon so alt, das ich meine Variablen vorher deklariere (alles was zum rechnen als "decimal" sollte hier reichen) und dann klassisch mit den Variablen rechne, so wie du es für die Anzeige deiner Werte auch nutzt.
Übernahme der Werte aus deinen Eingabefeldern mit CDbl()
Ansonsten kann es bzgl. deiner eigentlichen Fehlermeldung evtl. mit den Ländereinstellungen Probleme geben.
Probiere doch bei deinen Dezimalzahlen mal den Punkt als Trennung und nicht das Komma.
Gruß
Xolger
warum rechnest du die Summe über "Application.Evaluate"?
Wenn hier eine Zeichenfolge ensteht, die sich nicht auflösen läßt, kommt auch ne Fehlermeldung.
(Zum Beispiel wenn ein Scherzkeks bei den Werten auch ein Minus eingibt)
Ich bin schon so alt, das ich meine Variablen vorher deklariere (alles was zum rechnen als "decimal" sollte hier reichen) und dann klassisch mit den Variablen rechne, so wie du es für die Anzeige deiner Werte auch nutzt.
Übernahme der Werte aus deinen Eingabefeldern mit CDbl()
Ansonsten kann es bzgl. deiner eigentlichen Fehlermeldung evtl. mit den Ländereinstellungen Probleme geben.
Probiere doch bei deinen Dezimalzahlen mal den Punkt als Trennung und nicht das Komma.
Gruß
Xolger