![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
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: 0 online | 0 heute | 0 diesen Monat | 2266304 insgesamt | Seitenaufrufe: 143 | ![]() |
Letzte Änderung: 24.06.2006 | ![]() |
© 2001-18 Christian Freßdorf | ![]() |
Kaum hat man ein bissel was, gleich gibt es welche, die ärgert das. Wilhelm Busch |
powered by phpCMS and PAX |