Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
664to668
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
664to668
664to668
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

letztes gefülltes Label erkennen, Inhalt ändern

letztes gefülltes Label erkennen, Inhalt ändern
15.09.2005 11:46:22
ChrisBee
Hallo Excel-Freunde.
...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

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: letztes gefülltes Label erkennen, Inhalt ändern
15.09.2005 12:27:52
Manfred
Hallo ChrisBee,
Ich würde einen anderen Weg gehen:
Schreibe die nicht gerundendeten / nicht formatiertenen Werte einfach in den .tag eines jeden Labels. Dann kannst du bei der weiteren Berechnung immer auf den exakten Wert zugreifen. Anzeigen kannst Due den Wert ja immer noch Formatiert mit zwei dezimalstellen hinter den Komma.
Beispiel:
Label1.Tag= 1.123456789
Label2.Tag= 2.34567890
Label3.Tag= 3.456789012
Label1.Caption= Format(Label1.Tag,"0.00")
Label2.Caption= Format(Label2.Tag,"0.00")
Label3.Caption= Format(Label3.Tag,"0.00")
Summe= CSng(Label1.Tag) + CSng(Label2.Tag)+CSng(Label3.Tag)
LabelSumme.Caption= Round(Summe,2)
Damit kannst Du Rundungsfehler vermeiden
Gruß Manfred
Anzeige
AW: letztes gefülltes Label erkennen, Inhalt ände
15.09.2005 13:09:59
ChrisBee
Hallo Manfred.
Das ergibt bei mir zum Schluß leider den gleichen Rundungsfehler.
Trotzdem schonmal Danke...
ChrisBee

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige