Pflichtfeldprüfung |
|
|||||||||||||||||||||
Wer kennt nicht folgendes Problem: Eigentlich kein wirkliches Problem. Einfach beim Verlassen eines Feldes prüfen, ob die Feldlänge größer Null ist oder ungleich einem Leerstring. Im folgenden wird ein anderer Lösungsweg beschrieben: Das folgende Beispiel verwendet das Click-Ereignis der Schaltfläche cmdInsert, mit der die Eingabedaten in die Formularfelder ("TM<Name>") eingefügt werden. Die Prüfung erfolgt in der Funktion fkt_Pflichtfelder, und nur wenn diese Funktion ein False zurückliefert, wird der Hinweisdialog zusammengesetzt und die weitere Verarbeitung beendet. Option Explicit Dim aPFelder() As String Private Sub cmdInsert_Click() Dim msg As String Dim i As Integer If fkt_Pflichtfelder = False Then If UBound(aPFelder) > 0 Then msg = "Folgende Pflichtfelder sind nicht ausgefüllt" & vbCrLf For i = 1 To UBound(aPFelder) msg = msg & " - " & aPFelder(i) & vbCr frmEingabe.Controls(aPFelder(i)).BackColor = RGB(255, 255, 0) Next i MsgBox msg frmEingabe.Controls(aPFelder(1)).SetFocus End If Exit Sub End If If fkt_PLZ = False Then Exit Sub ActiveDocument.FormFields("TMVorname").Result = txtVorname.Text ActiveDocument.FormFields("TMNachname").Result = txtNachname.Text ActiveDocument.FormFields("TMStrasse").Result = txtStrasse.Text ActiveDocument.FormFields("TMOrt").Result = txtOrt.Text ActiveDocument.FormFields("TMAnrede").Result = txtAnrede.Text ActiveDocument.FormFields("TMPLZ").Result = txtPLZ.Text DoEvents With Me .Left = Left - 1 .Left = Left + 1 End With End Sub Nach dem Zuweisen der Formularfeld-Inhalte wird ein Trick angewendet, um die Aktualisierung des Dokumentes und somit der Felder zu gewährleisten. Durch die Verschiebung der Userform um jeweils 1 Pixel nach links und wieder zurück, wird die Kontrolle an Word zurückgegeben. Ohne diese Übergabe kann es vorkommen, dass die Formularfeld-Inhalte erst beim Schließen der Userform korrekt aktualisiert werden. In der Funkion fkt_Pflichtfelder werden nun die einzelnen Felder geprüft. Gleichzeitig erfolgt an dieser Stelle über den Funktionsaufruf IsAlphaNumeric die Prüfung auf alphanumerische Eingabe. Liefert die Funktion ein False zurück (Feld enthält ungültige Zeichen), wird eine entsprechende Fehlermeldung ausgegeben. Function fkt_Pflichtfelder() As Boolean Dim msg As String Dim frmFields As Control Dim i As Integer ReDim aPFelder(0) i = 0: fkt_Pflichtfelder = False For Each frmFields In frmEingabe.Controls If frmFields.Tag = "PF" Then frmFields.BackColor = wdColorWhite If frmFields.Text = "" Then i = i + 1 ReDim Preserve aPFelder(i) aPFelder(i) = frmFields.Name ElseIf frmFields.Name <> "txtPLZ" Then If IsAlphaNumeric(frmFields.Text) = False Then msg = "Das Feld '" & frmFields.Name & "' besitzt ungültige Zeichen!" MsgBox msg, vbCritical, "Eingabefehler" frmFields.BackColor = RGB(255, 255, 0) frmFields.SetFocus Exit Function End If End If End If Next frmFields If UBound(aPFelder()) = 0 Then fkt_Pflichtfelder = True End Function Zu beachten ist dabei das Format der Eingabefelder: Function IsAlphaNumeric(ByVal strTest As String) As Boolean Dim Text1, Text2, Text3, strZeichen As String Dim intZeichen As Integer IsAlphaNumeric = True Text1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ": Text2 = LCase(Text1) & " -" ': Text3 = "123456789+-/*" For intZeichen = 1 To Len(strTest) strZeichen = (Mid$(strTest, intZeichen, 1)) If InStr(1, Text1 & Text2, strZeichen, 1) = 0 Then IsAlphaNumeric = False End If Next intZeichen End Function In der Funktion fkt_IsNumeric wird das angegebene Userform-Control auf numerischen Wert geprüft und ggf. eine Fehlermeldung ausgegeben. Gleichzeitig liefert die Funktion das Prüfungsergebnis als boolschen Wert zurück. Function fkt_IsNumeric(ByRef txtField As Control) As Boolean Dim msg, strField As String With txtField If .Text <> "" Then If IsNumeric(.Text) = True Then strField = "TM" & Right(.Name, Len(.Name) - 3) ActiveDocument.FormFields(strField).Result = .Text fkt_IsNumeric = True .BackColor = wdColorWhite Else fkt_IsNumeric = False msg = "Bitte in das Feld '" & .Name & "' nur Zahlen eintragen!" MsgBox msg, vbCritical, "Eingabefehler" .BackColor = RGB(255, 255, 0) .SetFocus End If End If End With End Function Vor allem im Bereich der flexiblen Eingabewert-Prüfung lässt sich bestimmt noch einiges verbessern oder flexibler gestalten und somit viel Freiraum für eingene Lösungen. |
www.chf-online.de/vba/vbapflichtfelder.htm | © 2001-11 Christian Freßdorf (Zaphod-Systems) |