mreske
Goto Top

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
ekpreisberechnen

Mit dem Makro (siehe unten) funktioniert das auch.
Allerdings nur bei ganzen Zahlen. Sobald ein Dezimalwert ermittelt wird, bekomme ich einen Laufzeitfehler (Typenkonflikt).
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

Content-ID: 1288363765

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

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

149569
149569 21.09.2021 aktualisiert um 16:05:53 Uhr
Goto Top
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 ...
Xolger
Xolger 21.09.2021 um 16:04:31 Uhr
Goto Top
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
mreske
mreske 22.09.2021 um 05:55:29 Uhr
Goto Top
Guten Morgen zusammen,
danke für die Tipps.
Werde das ausprobieren und mich dann wieder melden.
Gruß