Access Summe Listenfeld mit Nachkommstellen
Hallo Forum,
ich habe ein Problem mit der Summe eines Listenfeldes. In einem Formular wird ein Listenfeld, das u. a. eine Spalte mit Mengenangaben enthält, über mehrere Comboboxen gefitert und in einem gesonderten Feld wird eine Summe gebildet. In den Comboboxen ist der folgende Code "Bei Aktualisierung" hinterlegt:
Dim y%
Me.SummeMenge = 0
For y = 0 To Liste16.ListCount - 1
Me.SummeMenge = Me.SummeMenge + Val(Liste16.Column(5, y))
Next y
Funktioniert soweit alles sehr gut, außer dass bei der Berechnung der Summe die Nachkommastellen der einzelnen Werte nicht berücksichtigt wird. Beispiel: 75,89 + 61,05 + 12,67 = 148,00.
Hat jemand eine Idee, wie ich zu dem richtigen Ergebnis 149,61 komme?
Vielen Dank im Voraus!!!!!!
Antwort schreiben
Antwort 1 von lorf55 vom 21.06.2020, 14:35 Options
Hi accessy,
ich habe mal
Dim y%
Dim s
s = Array("2.3", "2.3", "2.3", "2.3", "2.3")
SummeMenge = 0
For y = 0 To 4
SummeMenge = SummeMenge + Val(s(y))
Next y
Debug.Print SummeMenge
End Function
im Direktfenster mit ?summe() getestet und das ergab 11,5.
Ich kann es mir nur so erklären, dass du entweder
- in Liste16.Column(5, y) nur integer-Werte hast oder
- Me.SummeMenge irgendwo vorher als integer definiert hast.
Versuche doch mal mit Haltepunkt setzen und mit Einzelschritt-Abarbeitung herauszukriegen, wo wann welche Werte auftauchen.
Gruß
lorf
Antwort 2 von accessy vom 23.06.2020, 10:24 Options
Hallo lorf,
vielen Dank für Deine Antwort. Leider treffen Deine beiden Vermutungen nicht zu, denn
- in Liste16.Column(5, y) habe ich Single-Werte (werden im Listenfeld auch mit Nachkommastellen angezeigt)
- das Feld SummeMenge wird vorher gar nicht definiert, wird nur an dieser Stelle zu Berechnung eingesetzt
Hast Du evtl. noch eine andere Idee?
Vielen Dank!
Accessy
Antwort 3 von lorf55 vom 23.06.2020, 15:19 Options
Hallo accessy,
da bleibt eigentlich nur noch die implizite Variablendeklaration durch
Me.SummeMenge = 0
als Ursache. Versuche es doch mal so:
Option explicit
Dim SummeM as Double
Dim y as integer
SummeM = 0
For y = 0 To Liste16.ListCount - 1
SummeM = SummeM + Val(Liste16.Column(5, y))
Next y
Me.[i]Formularfeld[/i] = SummeM
.
Gruß
lorf
Antwort 4 von accessy vom 23.06.2020, 16:54 Options
Hallo lorf,
danke nochmal für den Tip, hab´s gleich ausprobiert, leider mit dem gleichen - falschen - Ergebnis. Ich habe Double und Single ausprobiert. Hast Du vielleicht noch eine Idee, woran es liegen könnte?
Private Sub SF_Artikelbez_AfterUpdate()
DoCmd.Requery "Liste16"
Dim z%
Dim Summe As Double
Me.Summe = 0
For z = 0 To Liste16.ListCount - 1
Me.Summe = Me.Summe + Val(Liste16.Column(8, z))
Next z
Dim y%
Dim SummeMenge As Double
Me.SummeMenge = 0
For y = 0 To Liste16.ListCount - 1
Me.SummeMenge = Me.SummeMenge + Val(Liste16.Column(5, y))
Next y
End Sub
Antwort 5 von lorf55 vom 23.06.2020, 19:34 Options
Hallo accessy,
nimm doch einfach mal das Me. raus bzw. teste doch mal den Code wie ich ihn gepostet habe.
Gruß
lorf
Antwort 6 von accessy vom 23.06.2020, 20:52 Options
Hallo lorf,
ich habs jetzt nochmal genau so getestet, wie du geschrieben hast, aber ohne das Me. wird nichts mehr berechnet und es kommen teilweise auch Fehlermeldungen, wenn ich den Code 1:1 übernehme.
Trotzdem vielen Dank für Deine Hilfe, ich muss nun weiterprobieren!
Vielen Dank!
Accessy
Antwort 7 von lorf55 vom 24.06.2020, 09:31 Options
Hallo accessy,
OK, letzter Versuch:
Private Sub SF_Artikelbez_AfterUpdate()
DoCmd.Requery "Liste16"
Dim z as integer
Dim Summe As Double
Summe = 0
For z = 0 To Liste16.ListCount - 1
Summe = Summe + Val(Liste16.Column(8, z))
Next z
Me.Formularfeld8=Summe
Summe = 0
For z = 0 To Liste16.ListCount - 1
Summe = Summe + Val(Liste16.Column(5, z))
Next z
Me.Formularfeld5=Summe
End Sub
Das
Me verhält sich wie eine implizit definierte variable und enthält den Bezug auf die aktuelle Instanz des Formulars.
Me.Summe=0 bezeichnet deshalb hier m.E. nicht dasselbe, wie Summe und definiert implizit eine Integer-Variable, weil sie mit 0 statt 0.0 initialisiert wurde.
Aber vielleicht liege ich auch daneben.
Wenn es damit auch nicht geht, denn sorry, dass ich dich belästigt habe.
Gruß
lorf
Antwort 8 von lorf55 vom 24.06.2020, 09:34 Options
Ach ja, statt Formularfeld5 und Formularfeld8 müssen natürlich deine ganz speziellen Formularfelnamen stehen.
Antwort 9 von accessy vom 24.06.2020, 14:34 Options
hallo lorf,
ich würde ja so gerne ein positives Feedback geben bei Deinen ganzen Bemühungen, aber leider funktionierts nicht :-(
Vielen, vielen Dank für Deine Hilfe, vermutlich hängt´s woanders. Falls ich es rausfinde, werde ich Dich hier informieren ...
MfG
Accessy