So nach dem Ja leider mein anderer Thread etwas aus den Fugen geraten ist, ist es hoffentlich ok das ich einen neuen starte um eventuell eine Lösung für mein noch bestehendes Problem zu bekommen.
Ausserdem hat die offene Frage nichts mit dem Titel des alten Threads zutun und kann so auch nur schlecht von anderen mit ähnlichem Problem gefunden werden.
So nun zum Problem.
Ich möchte Werte aus einem Listenfeld summieren.
Die Felder aus dem Listenfeld heissen: Brutto,Netto und Steuern.
Die Summe von beispielsweise der Spalte Brutto möchte ich in einem ungebundenen Textfeld (Text_Brutto) anzeigen Lassen.
Felddatentyp:Währung und Format:Euro
Mit folgendem Code habe ich es versucht:
Dim I As Long
Me.Text_Brutto = 0
For I = 0 To Me.List_Buchungsliste.ListCount - 1
Me.Text_Brutto = Format(CDbl(Nz(Me.Text_Brutto)) + CDbl(Me.List_Buchungsliste.Column(15, I)), "Standard")
Next I
Merkwürdigerweise hat der Code mal Ergebnisse zurückgeliefert und plötzlich nichtmehr.
Warum weiss ich leider nicht.
Es kommt der Fehler Laufzeitfehler 13 (Typen unverträglich)
CDbl scheint hier den Fehler zu verursachen.
Wenn ich CDbl mit Val ersetze funktionierts. Nur werden dann logischerweise die Nachkommastellen nicht mit gerechnet und mein Ergebnis ist nicht ausreichend.
Hat vielleicht jemand eine Idee woran das liegen könnte oder sogar eine alternative Lösung?
Ich hoffe es war verständlich genug. Kann echt jeden Tip gebrauchen.
Verzweifel langsam daran.
Habe gerade den Code nochmals ausprobiert mit CDbl und jetzt funtioniert er wieder.
Der Fehler scheint also nicht im Code ansich zu liegen.
Kann das was mit der Accessversion zutun haben? Accessversion ist 10
Ich meine das da irgendwas nicht so richtig kompatibel.
hmmm hoffe ihr wisst Rat
Hallo,
wie sieht denn die Datenherkunft des Listenfeldes aus, gespeicherte Abfrage, Tabelle oder Select ... Anweisung.
Zeige das mal bitte Namen, bzw. Select ...
Der Formatfunktion und Cdbl dürften überfüssig sein, zumindest an der Stelle.
Versuche es mal so:
Dim I As Long
Me.Text_Brutto = 0
For I = 0 To Me.List_Buchungsliste.ListCount - 1
Me.Text_Brutto = Nz(Me.Text_Brutto) + CDbl(Me.List_Buchungsliste.Column(15, I)
Next I
Formatiere jetzt einfach das Formularfeld.
Warum nimmst Du statt des Listenfeldes nicht ein Ufo?
Oder ermittelst einfach die Summe mit DomSumme()?
Für einen Vorschlag in der Richtung beantworte die Fragen im 1.Absatz oben.
Hallo,
dein Listenfeld hat ja eine Datenherkunft, welche in Form einer Abfrage, eines SQL-Statements eingestellt wird (ich gehe davon aus, dass es sich um die gleichen Steuerelemente handelt, die auch im anderen Thread Gegenstand waren)
In diesem Statement gabs eine WHERE-Klausel nach der dann die Ergebnisliste eingeschränkt wurde.
Diese WHERE-Klausel KÖNNTEST du dir bei diesem Problem zu nutze machen statt den Inhalt des Listenfeldes mit einer Schleife zu durchlaufen und zu summieren.
Setze für dein Vorhaben eine Domänenfunktion ein ----> DSum(....) bietet sich dafür an.
Also:
Me.Text_Brutto = DSum("Brutto", "DeineTabelle", "Veranstaltungsdatum=" & Format(Me.kfe_VD, "\#yyyy\-mm\-dd\#"))
ZitatAccessversion ist 10
10 wie Office 10.0
oder 10 wie Access 2010 ?
... ist aber egal, in diesen Bereichen unterscheiden sich die Versionen eigentlich nicht.
Nach kleiner Korektur funktioniert dein Code.
Dim I As Long
Me.Text_Brutto = 0
For I = 0 To Me.List_Buchungsliste.ListCount - 1
Me.Text_Brutto = (Nz(Me.Text_Brutto) + CDbl(Me.List_Buchungsliste.Column(15, I)))
Next I
könntest du mir erklären wie du zur Korrektur gekommen bist bzw. was du denkst das bei meinem Code den Fehler verursacht haben könnte?
Die Datensatzherkunft ist eine Abfrage...abf_Buchungen
Hallo,
Zitatkönntest du mir erklären ...
CDbl(Me.List_Buchungsliste.Column(15, I)
)die Klammer um CDbl wurde nicht geschlossen...
und bei deinem Code:
Format(CDbl(Nz(Me.Text_Brutto)) + CDbl(Me.List_Buchungsliste.Column(15, I)), "Standard")
Nachem du für die NZ-Funktion keinen Alternativwert deklariert hast wird "Standard" zurückgleiefert, wenn in einem Brutto-Feld kein Wert eingetragen wurde.Daher resultiert dann der Fehler 13 weil
sich Text nicht in Double konvertieren lässt.
Darauf habe ich dich bereits im vorherigen Thread in #1 hingewiesen.hab' mich verlesen sorry
@database
Wenn ich das richtig deute, würde dein Code ja anhand des selektierten Datums die Summe bilden.
Was aber wenn kein Datum angewählt ist?
Dann kann die funktion doch auch keinen Wert zurück geben oder?
Nicht dein Fehler aber die Option möchte ich schon haben.
was mir dazu einfallen würde wäre vielleicht ein button der mit diesem Code(?):
Me.Text_Brutto = DSum("Brutto", "abf_Buchungen")
Alle in der Abfrage enthaltenen Datensätze summiert.
Wenn kein Datum gewählt wurde, ist auch dein Listenfeld leer - dieses wird ja entsprechend der Datumsauswahl befüllt, wenn ich mich recht erinnere.
Das Abfangen solcher 'Fehler' kann auf verschiedene Weise erfolgen - du kannst ja auch einstellen, dass der gesamte Code nur dann ausgeführt wird wenn ein Datum ausgewählt wurde.
Ja und mit deiner Erklärung jetzt habe ich es auch verstanden!
Danke.
Wie gesagt ich brauche manchmal noch etwas genauere Erklärungen um zu begreifen.
Ist halt alles noch ein wenig unbekanntes Terrain.
Demnach sollte also mit diesem Code alles gut gehen oder?
Dim I As Long
Me.Text_Brutto = 0
For I = 0 To Me.List_Buchungsliste.ListCount - 1
Me.Text_Brutto = (Nz(Me.Text_Brutto) + CDbl(Me.List_Buchungsliste.Column(15, I)))
Next I
Hi,
ich würde das noch folgendermaßen ändern:
Me.Text_Brutto = Me.Text_Brutto + CDbl(NZ(Me.List_Buchungsliste.Column(15, I),0))
Me!Text_Brutto brauchst du nicht mit NZ absichern da du 2 Zeilen darüber das Feld auf 0 setzt und ein NULL-Wert damit nicht möglich ist.
In der Column(15,x) könnte aber ein NULL-Wert stehen (rein theoretisch) und dann sollte 0 geliefert werden, daher auch der Alternativwert für NZ
Ok jetzt hab ichs begriffen...hoffe ich zumindest.
Vielen dank der Code funktioniert wunderbar.