Access formular feld für berechnungen

Hallo, ich habe folgendes Problem:

ich gebe in einem Formular in Feld A den 7% Umsatz ein und in Feld B den 19% Umsatz jetzt möchte ich in Feld C nur zur überprüfung um Tippfehler zu finden noch die Summe eingeben. Dieser Wert aus Feld C soll aber nicht gespeichert werden, da er nur zur Überprüfung im moment der eingabe dient. Wie kann ich das Handhaben?
Ein ungebundenes Textfeld hat das Problem, dass der Wert in alle Datensätze gleich übernommen wird und nicht auf den jeweiligen Datensatz in dem ich mich gerade befinde.

Hallo Tobias!
Es ist mir ehrlich gesagt nicht klar warum du die Summe nochmal eingeben willst. Wenn du im Feld C die Summe der Felder A und B anzeigst hast Du Deinen Wert zum überprüfen!?
Martin

Hallo,

ich verstehe Dein Problem nicht. Arbeitest Du ein einem Einzel- oder Endlosformular?

Hallo Martin, der Summenwert soll einfach nochmal eingegeben werden um zu überprüfen ob evtl. ein Tippfehler vorhanden ist, Wenn also bspw. in A 1,23 in B 2,34 und in C 3,58 eingegeben wird, soll eine Fehlermeldung oder ähnliches erscheinen, dass etwas nicht stimmt und der user die Daten nochmal überprüft.

Also einfach, um Fehlerhafte eingaben zu vermeiden.

Hallo, Katschenreuter,
ich arbeite mit einem Endlosformular, welches wie eine Tabelle aufgebaut ist. und wenn ich halt Wert C in eines ungebundenes Feld schreibe, dann schreibt Access den Wert bei jeder Datenzeile rein. Und gespeichert soll der Wert auch nicht werden, da er sich ja berechnen lässt. Der Wert dient nur der Überprüfung im moment der Eingabe.

Hallo Tobias!

Na vielleicht so:
Private Sub C_AfterUpdate()
If (Me.A + Me.B) Me.C Then
Call MsgBox(„Es liegt ein Eingabefehler vor!“, vbExclamation Or vbSystemModal, Application.Name)
Me.A.SetFocus
End If
End Sub

Ich würd´s in diesem Fall so machen.

LG
Martin

OK, dass hört sich schon malgut an, aber wie kann ich diese Funktion aufrufen? Ich habe jetzt mal unter Ereignis „Beim Verlassen“ =C_AfterUpdate() eingegeben, da meckert er, dass er die Funktion nicht finden kann.

Noch zur Verständnis, dass z.b. A ist der Name des Feldes der?

OK, hat sich erledigt.
Man muss einfach nur Ereignisprozedur einstellen und dann klappt es.

Aber das Problem, dass er bei dem Feld C den eingegebenen Wert in alle Datensätze eingibt, lässt sich nicht umgehen oder?

Hallo, sorry, dass ich mich erst jetzt melde.

Auf die Schnelle sehe ich zwei Möglichkeiten:
1.) Du verwendest ein gebundenes Feld. Bei späteren Auswertungen/Berechnungen in Formularen oder Berichten ignorierst Du dann das Feld. Ist eine Frage des Datenvolumens.
Oder
2.) Du stellst Deine bereits erfassten Daten im einem Unterformular dar. Das Hauptformular wird dann für die eigentlich Datenerfassung temporär genutzt. Hierfür brauchst Du dann eine entsprechende Hilfstabelle und mehrere Abfragen zum Löschen der Hilfstabelle und Schreiben der erfassten Daten von der Hilfstabelle in die eigentliche Datentabelle. Gesteuert werden die Aktionen dann über einen Makro.

Konnte ich Dir helfen?

Viele Grüße
Thomas

Hallo Tobias!

Nur zum Verständnis:
Im Feld „C“ ruftst du das Ereignis „Nach Aktualisierung“ auf. Das scheint zu klappen.

Wenn Du ein Endlosformular hast, in dem Du das Kontrollfeld „C“ neben den Feldern „A“ und „B“ hast, wird er dir das bei jedem Datensatz anzeigen. Prinzipiell, da das Feld ja an kein Tabellenfeld gebunden ist und somit zu nichts gehört.
Du willst den Kontrollwert ja auch nicht speichern!?

Angenommen also der Wert stimmt, dann kannst Du das Feld ja wieder löschen.
Falls der Wert nicht stimmt, zeigt es Dir die Fehlermeldung und du löscht den Wert danach. Wie´s gefällt.
Oder aber Du erstellst in der zugrunde liegenden Tabelle eine zusätzliche Spalte „SummeAB“, dann funktioniert das. Ist aber grauslich sinnlos.

Du kannst es aber auch so machen:

Private Sub C_AfterUpdate()
Dim sA As Single 'Wert Feld A (7 %)
Dim sB As Single 'Wert Feld B (19 %)
Dim sC As Single 'Errechnete Summe

sA = Me.A
sB = Me.B
sV = sA + sB

If sV Me.C Then

Call MsgBox(„Es liegt ein Eingabefehler vor!“ _
& vbCrLf & „Der richtige Wert müsste " & CStr(sV) & " sein.“ _
, vbExclamation Or vbSystemModal, Application.Name)

Me.C = vbNullString 'Löscht das Kontrollfeld
Me.A.SetFocus
End If
End Sub

Martin