2017-03-20 5 views
1

Ich habe ein Benutzerformular mit 3 Textfeldern. txtCurrentSum, txtTargetVal und txtDelta. Ich habe Textfeldwerte initialisiert, als das Formular geöffnet wurde.Excel VBA - Textformatierung des Benutzerformulars verursacht Rundungsfehler

delta sollte Null sein, aber die txtDelta Textbox ist 4,99999999999545E-03

zeigt Wie kann ich diese stiuation umgehen?

'Variable Definitions 
Private originalSum As Double 
Private targetSum As Double 
Private precision As Integer 
Private delta As Double 

Private Sub UserForm_Initialize() 

    originalSum = 311.135 
    targetSum = originalSum 
    delta = targetSum - originalSum 

    precision = 2  
    txtCurrentSum.Text = Format(Hammer.originalSum, "#,##0.00") 
    txtTargetVal.Text = Format(targetSum, "#,##0.00") 
    txtDelta.Text = Format(delta, "#,##0.00") 

End Sub 

habe ich nicht die Nummer Formatierung in der Object/Eigenschaften des Formulars, weil ich sie programmaticaly ändern würde.


Das Problem wurde in einem anderen Unterprogramm gefunden. Anscheinend Sub txtTargetVal_AfterUpdate() Ereignis wird ausgelöst, wenn ich die Textfelder initialisiere. delta wurde in diesem Sub aktualisiert. Ich füge round hier hinzu, um das Problem zu beheben.

' Target Value Changed 
' 
Private Sub txtTargetVal_AfterUpdate() 
    targetSum = CDbl(txtTargetVal.Text) 
    txtDelta.Text = targetSum - originalSum 
End Sub 

Hier änderte ich txtDelta.Text = targetSum - originalSum mit txtDelta.Text = Round(targetSum - originalSum, precision)

Antwort

2

Da die auf dem Ausgang zwei Dezimalstellen wollen, schreiben

txtDelta.Text = Format(Round(delta, 2), "#,##0.00") 

statt txtDelta.Text = Format(delta, "#,##0.00")

+0

Ihnen sehr danken. Ich habe die Ursache des Problems in einem anderen Sub gefunden, aber mit Ihrer Methode behoben. Ich füge die fraglichen Details hinzu. – wizofwor

Verwandte Themen