![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
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 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 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. |
![]() |
![]() |
Besucher: 4 online | 111 heute | 4180 diesen Monat | 2175687 insgesamt | Seitenaufrufe: 120 | ![]() |
Letzte Änderung: 24.06.2006 | ![]() |
© 2001-18 Christian Freßdorf | ![]() |
Ich habe nie einen gesunden Menschen getroffen, der sich über seine Gesundheit Gedanken gemacht hätte, und nie einen guten Menschen, der um seine Seele besorgt wäre. John Burdon Sanderson Haldane, 1894-1964, engl. Biologe und Genetiker |
powered by phpCMS and PAX |