Prüfschleife VBA

Hallo Leute,
ich möchte den User gern mit seinen eingegebenen Daten vor dem Speichern durch eine Prüf-Rutine jagen, um unlogische Erfassungen aus zu schließen.
Das ganze soll in Access 2010 erfolgen und mein Eingabefeld heißt mit Namen
„Titel (Thematik)“ und ist ein Textfeld in einer Eingabemaske.

Vorgestellt habe ich mir folgendes:
Public Sub Prüfung()
On Error GoTo Fehler
If [Titel(Thematik)].Value = „“ Then Error.Raise 1
Speichern
Fehler:
If Err.Number = 1 Then MSGBox ("Titel (Thematik) bitte eingeben ! "): [Titel(Thematik)].SetFocus
Exit Sub
Resume Next
End Sub

Leider erwische ich das Feld anscheinend nicht richtig. Wie spreche ich das am besten an ?

Christian

Hallo,

ich möchte den User gern mit seinen eingegebenen Daten vor dem Speichern durch eine Prüf-Rutine jagen

ob er das wohl mitmacht ??

Privat Sub Form_BeforeUpdate(Cancel as Integer)
If IsNull(Me![Titel(Thematik)] ) Then
MSGBox  "Titel (Thematik) bitte eingeben ! "
Cancel =True
Me![Titel(Thematik)].Setfocus
End IF
' weiter Textfelder dito bei Bedarf
.
.

End Sub

btw: Sonder - und Leerzeichen in Namen (wie auch reservierte Wörter) sind mitunter ein Ko-Kriterium für die Funktionalität der DB…

Hallo Ralf,
funktioniert leider nicht.
Ich habs wohl falsch beschrieben.
Unten auf diesem Formular ist eine Schaltfläche, die den eingegebenen Datensatz in die Tabelle speichert.
Bevor dieses aber passiert, möchte ich die Eingaben einer Prüfung auf Vollständigkeit und Logik unterziehen. Daher versuche ich per Sprungmarke zu dem eigenen Sub Prüfung () zu springen um anschließend entweder an die Stelle mit dem fehlenden Eintrag, oder dem falschen Eintrag zu springen, oder, wenn alles richtig ist, wieder zurück in den Sub Speichern() zu springen.
Eingeben können soll der User zunächst erstmal alles. Daher ist BeforeUpdate() nicht das richtige Ereignis.

Gruß Christian

Hallo,

ich bin nicht Ralf… :wink:

Ansonsten bleibe ich bei meinem Vorschlag, der genau das tun wird, was Du machen willst.

Deiner „Ablauflogik“ kann ich allerdings nicht ganz folgen…

Die Schaltfläche ist ok, wenn auch überflüssig.

Daher versuche ich per Sprungmarke zu dem eigenen Sub Prüfung () zu springen um anschließend entweder an die Stelle mit dem fehlenden Eintrag, oder dem falschen Eintrag zu springen, oder, wenn alles richtig ist, wieder zurück in den Sub Speichern() zu springen.

Ehrliche Antwort ? Das ist Quatsch.

Daher ist BeforeUpdate() nicht das richtige Ereignis.

Womit begründest Du diese (falsche) Behauptung?

Gruß
Franz, DF6GL

…entschuldige Franz !

womit ich diese Behauptung begründe ? ganz einfach mit dem DAU !

…dem dümmsten anzunehmenden User. Für den schreibe ich dieses Programm. Mir ist auch klar. dass wenn ich die eingaben dierekt bei Eingabe schon auf Richtigkeit prüfen lasse, es ebend gar nicht erst zu falschen Feldbefüllungen kommt.
Das versteht aber nicht jeder bei uns im Betrieb. Daher soll eine Richtigkeitsprüfung erst unmittelbar vor dem Abspeichern des Datensatzes erfolgen…

Also per Sprungmarke in den Sub Prüfung(), diesen erfolgreich durchlaufen, und dann weiter mit der Speicherung des Datensatzes…

:smile:

Hallo,

also nochmal:

Also per Sprungmarke in den Sub Prüfung(), diesen erfolgreich durchlaufen, und dann weiter mit der Speicherung des Datensatzes…

Wie gesagt: das ist Quatsch. Das ist prozedural gedacht (vermute ich mal) und passt nicht in den event-gesteuerten Formularablauf.

Daher soll eine Richtigkeitsprüfung erst unmittelbar vor dem Abspeichern des Datensatzes erfolgen

Access (Formulare) sind ereignis-gesteuert und nicht prozedural. D. h. es treten Events (Ereignisse) bei den verschiedenen Zuständen/Abläufen aus, die auswertbar (mit Code hinterlegbar) sind , soll heißen, auf die man mittels Code oder auch Makros (igitt) reagieren kann und zudem teilweise ein Abbruch-Argument (Cancel as Integer) besitzen, so dass der Ablauf (die Ereignisprozedur, hier: das Speichern des Datensatzes) abgebrochen werden kann.

Das Form_Beforeupdate-Ereignis tritt auf, wenn ein DS geändert wurde, aber noch nicht gespeichert ist. Ob die Speicherung durch einen Button (mit hinterlegten Code etwa wie Runcmd accmdSaverecord oder Me.Dirty =false) oder durch profanen Datensatzwechsel oder auch durch das Schließen des Forms erfolgt, ist hier unerheblich.

Jedenfalls ist zum Zeitpunkt des Ereignisses der DS noch nicht in die Tabelle gespeichert, sondern steht erst zur Speicherung an, wodurch die Daten auf Plausibilität (z. B. Isnull() ) geprüft werden können und auch andere Maßnahmen eigeleitet werden können ( z. Fokus setzen auf das jeweils geprüfte und als fehlerhaft gefunden Feld)

In dieser Ereignisprozedur hat man nun die Möglichkeit, genau dieses

Daher soll eine Richtigkeitsprüfung erst unmittelbar vor dem Abspeichern des Datensatzes erfolgen…

zu erledigen.

So. das sollte jetzt mal reichen als „Tutorial“ ,…

Am besten ist, Du baust die (meine) vorgeschlagene Prozedur mal ein und testest das Ganze…

Gruß
Franz, DF6GL