Option Explicit
Function FormularCheck(checkForm As Form) As Boolean Dim ctl As Control Dim i As Integer Dim err As String err = ""
For Each ctl In checkForm.Controls If LCase(ctl.Tag) = "x" Then Select Case ctl.ControlType Case 105: 'Auswahlrahmen If IsNull(ctl.Value) then err = err & ctl.name & vbCrLf Case 106: 'Kontrolkästchen If IsNull(ctl.Value) then err = err & ctl.name & vbCrLf Case 107: 'Radio Button If IsNull(ctl.Value) Or ctl.Value = 0 then err = err & ctl.name & vbCrLf Case 109: 'Textfeld If IsNull(ctl.Value) then err = err & ctl.name & vbCrLf Case 110, 111: 'Listenfeld und Kombinationsfeld If IsNull(ctl.Value) then err = err & ctl.name & vbCrLf End Select End If Next If Len(err) = 0 Then FormularCheck = True Else MsgBox "Folgende Felder müssen ausgefüllt werden:" & vbCrLf & err, vbExclamation + vbOKOnly FormularCheck = False End If End Function Als erstes benötigen wir die Information um welches Formular es sich handelt. Der Parameter checkForm ist als Form-Object deklariert, wodurch wir auf die Methoden des Formulars zugreifen können. Das Form-Object wird definiert mit: Forms(Formularname). Der Formularname kann ein String oder eine Variable sein. Hier wird der Namen automatisch gewählt über Me.Name. Wir benötigen noch das zweite Object ctl für das Steuerelement (Control). Nun können in einer For Each Schleife alle Steuerelemente des Formular-Objektes durchlaufen lassen. Um zu bestimmen, welche Steuerelemente zu überprüfen sind, verwenden wir die Eigenschaft Marke (Englisch Tag). Jedes zu überprüfende Steuerelement erhält im Formular als Eigenschaft Marke ein x. Diese Eigenschaft fragen wird in der For Each Schleife ab. Mit lcase() wandeln wir die Marke in Kleinbuchstaben um, damit auch ein großes X erkannt wird. Definition der Marke siehe Bild unten. 
Die Unterscheidung, um welche Art der Steuerlemente es sich handelt, geschieht mit der Eigenschaft ControlType. Diese kann mit einer internen Konstante oder mit dem entsprechendem Zahlencode verglichen werden. Die Bezeichnung für jeden einzelnen ControlType entnehmen Sie dem Code, sie ist als Kommentar eingefügt. Wir verwenden die String-Variable Err für die Ausgabe der Fehlermeldung. In ihr werden alle Felder gesammelt die nicht ausgefüllt wurden. Diese Meldung wird dann ausgegeben, wenn diese Variable mit Werten gefüllt ist, also wenn min. 1 Steuerelement nicht ausgefüllt wurde. Zu guter Letzt übergeben wir den Rückgabewert, entweder wahr oder falsch, je nach dem die Prüfung erfolgreich war oder nicht. Mit Hilfe diesem Rückgabewert kann in der aufrufenden Funktion die weitere Bearbeitung ausgelöst werden. Der Aufruf der Funktion erfolgt im Formular wo man die Eingabe überwachen möchte, am besten im Code einer vorhandenen Schaltfläche, z.B. zum Speichern der Eingaben: If FormularCheck(Forms(Me.name)) Then 'hier die Verarbeitung im Erfolgsfalle End If Die MsgBox-Ausgabe bei einem Fehler sieht dann z.B. wie folgt aus: 
Sie haben nun eine wiederverwendbare Funktion, die Sie in jedem Projekt und für jedes Formular einsetzen können ohne jedesmal das Rad neu zu erfinden. Sie können die Plausibilitätsprüfung auch dahingehend ändern, dass z.B. bei der Eingabe in Textfeldern eine Mindestanzahl an Zeichen gefordert wird. Ändern Sie dafür die folgenden Zeilen wie angegeben ab: Case 109: 'Textfeld If IsNull(ctl.Value) then err = err & ctl.name & vbCrLf Ersetzen mit: Case 109: 'Textfeld If Len(Nz(ctl.Value, "")) < 3 then err = err & ctl.name & vbCrLf Im obigen Beispiel wird eine Mindestanzahl von 3 Zeichen erwartet, diese Zahl kann beliebig geändert werden. Da ctl.Value im ungünstigsten Falle Null wird, muss dies mit der NZ()-Funktion abgefangen werden, um einen Fehler zu vermeiden. |