Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: SP am Januar 21, 2011, 18:05:38

Titel: Zahlenwerte aus einem Listenfeld Summieren
Beitrag von: SP am Januar 21, 2011, 18:05:38
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.
Titel: Re: Zahlenwerte aus einem Listenfeld Summieren
Beitrag von: SP am Januar 21, 2011, 18:31:07
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
Titel: Re: Zahlenwerte aus einem Listenfeld Summieren
Beitrag von: MzKlMu am Januar 21, 2011, 18:51:49
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.
Titel: Re: Zahlenwerte aus einem Listenfeld Summieren
Beitrag von: database am Januar 21, 2011, 19:01:52
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.

Titel: Re: Zahlenwerte aus einem Listenfeld Summieren
Beitrag von: SP am Januar 21, 2011, 19:04:12
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
Titel: Re: Zahlenwerte aus einem Listenfeld Summieren
Beitrag von: database am Januar 21, 2011, 19:17:32
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
Titel: Re: Zahlenwerte aus einem Listenfeld Summieren
Beitrag von: SP am Januar 21, 2011, 19:20:03
@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.

Titel: Re: Zahlenwerte aus einem Listenfeld Summieren
Beitrag von: database am Januar 21, 2011, 19:24:59
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.
Titel: Re: Zahlenwerte aus einem Listenfeld Summieren
Beitrag von: SP am Januar 21, 2011, 19:27:34
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

Titel: Re: Zahlenwerte aus einem Listenfeld Summieren
Beitrag von: database am Januar 21, 2011, 19:33:32
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
Titel: Re: Zahlenwerte aus einem Listenfeld Summieren
Beitrag von: SP am Januar 21, 2011, 19:39:12
Ok jetzt hab ichs begriffen...hoffe ich zumindest.

Vielen dank der Code funktioniert wunderbar.