...kleine Denksport-Aufgabe am Mittag. ;o)
Ich habe ein Userform (EuroCalc) mit 8 Labels. (lblAu1 - lblAu8)
Jedes Label hat eine CheckBox. Ist die CheckBox auf True dann
werden in den Labels über einen Button Teilbeträge ausgegeben.
(Berechnung der Teilbeträge im Verhältnis zu einer Zahl die in eine
TextBox eingegeben wird.)
Die Labels beinhalten also entweder 0 = "" oder eine Zahl im Format 0,00.
Nun ergibt sich aber durch die vorherige Berechnung dieser Teilbeträge meist
ein kleiner Rundungsfehler. Wenn man zum Schluß alle Labels wieder summiert,
dann weicht diese Summe häufig um +0,01 oder -0,01 von der Original-Zahl ab.
Nun möchte ich das das letzte gefüllte Label gesucht wird und dort
0,01 abgezogen oder dazugezählt werden soll.
Beispiel: lblAu1,2,3,5 und 6 enthalten Zahlen, lblAu4,7,8 sind leer.
Bei Rundungsfehler soll Label6 gefunden und korrigiert werden.
Daher hab ich am Ende des Berechnungs-Codes folgenden Code angehängt:
For i = 1 To 8
If Not Controls("lblAu" & i).Caption = "" Then
sum = sum + Controls("lblAu" & i).Caption
End If
Next i 'berechnet die Summe aller Labels
If sum = txtEK.Value Then Exit Sub
If sum Call AusgleichPlus
Else
Call AusgleichMinus
End If
...und dann die beiden Sub's:
Sub AusgleichPlus()
Dim z As Integer
For z = 8 To 1 Step -1
With EuroCalc.Controls("lblAu" & z)
If Not .Caption = "" Then
.Caption = Format(.Caption + 0.01, "0.00")
Exit Sub
End If
End With
Next z
End Sub
Sub AusgleichMinus()
Dim z As Integer
For z = 8 To 1 Step -1
With EuroCalc.Controls("lblAu" & z)
If Not .Caption = "" Then
.Caption = Format(.Caption - 0.01, "0.00")
Exit Sub
End If
End With
Next z
End Sub
Wieso funktioniert das aber nun bei AusgleichPlus manchmal und bei
AusgleichMinus garnicht?
...oder weiß vielleicht jemand eine andere Lösung?
Bin mal wieder für jeden hilfreichen Ansatz sehr dankbar.
Herbstliche Grüße
ChrisBee