2016-07-30 13 views
1

Hallo Ich bin ziemlich neu in MS Access und ich konnte einige Ihrer Expertise nutzen zu beraten:mehrzeilige Textbox Validierung ms access

würde Ich mag den Text eines mehrzeiligen Textbox validieren, so dass der Benutzer nur eintreten kann 2 Großbuchstaben - 7 Zahlen - Semikolon - neue Zeile. Als Beispiel wäre die Textbox wie folgt aussehen (aber mit jedem Eintrag in einer neuen Zeile, da ich es so haben, dass eine neue Zeile in der Textbox

für eine Validierung macht eingeben
AB1234567; SE0001848; SE0019591; RE0010599; etc. 

Ich denke, das ist zu komplex Ich denke auch, dass es für eine Eingabemaske zu komplex ist.Ich begann RegEx zu untersuchen, um den Text zu validieren, aber ich habe aufgehängt, wie der Code jede neue Zeile in der mehrzeiligen Textbox auswerten kann, damit das gesamte Textfeld ausgewertet wird müssen eine Schleife von einer Art

Schließlich möchte ich, dass der Benutzer ein Meldungsfeld erhalten, wenn sie ihren Text falsch eingeben, der den Eintrag blockiert, der dem Datensatz hinzugefügt wird, und dem Benutzer auch erklärt, dass sie brauchen ändern ihre Eintragung, damit sie gültig ist.

Antwort

2

Ich denke, Ihre Idee von RegEx ist die einfachste, aber Sie müssen eine Referenz hinzufügen (siehe Code).

sollte dies tun, was Sie wollen

Hinweis (nur text14 mit Ihrem Text Kontrolle ersetzen) - I die = TRUE CANCEL entfernt, da dass die Benutzer Daten löscht. Der beste Weg zu machen woul DBE sicher, dass das Textfeld ungebunden ist - dann, wenn gültig Sie das aktuelle Feld aktualisieren würden, wenn der RegExp für alle Linien validiert

Private Sub Text14_BeforeUpdate(Cancel As Integer) 

    ' Requires reference to "Microsoft VBScript Regular Expressions 5.5" 
    ' Under Tools | References 
    ' Add Reference to "Microsoft VBScript Regular Expressions 5.5" 

    ' 2 Capital Letters followed by 7 digits and ";' 
    Const VALID_LINE As String = "[A-Z]{2}[\d]{7};" 

    Dim regEx As New RegExp 

    Dim strData  As String ' Read in textbox 
    Dim varLines As Variant ' Use this to hold lines of text 

    Dim intNumLines As Integer 
    Dim intLine  As Integer 
    Dim strLine  As String 

    With regEx 
     .Global = True 
     .Multiline = False 
     .IgnoreCase = False 
     .Pattern = VALID_LINE 
    End With 

    ' Replace Text14 with your text box control name 
    strData = Text14.Value ' Get Data from Text box 

    ' Split data into lines using Carriage Return Line Feed delimiters 
    varLines = Split(strData, vbCrLf) 

    ' Go thru all lines to check for data issue 
    intNumLines = UBound(varLines) 
    For intLine = 0 To intNumLines 
     strLine = varLines(intLine) 
     If Not regEx.Test(strLine) Then 
      MsgBox "Problem with Line #" & (intLine + 1) 
      ' Cancel - if you want to wipe out data 
      ' Cancel = True 
      Exit Sub 
     End If 
    Next 

    MsgBox "Data Looks Good: All " & intNumLines & " Lines" 

End Sub 
+1

Wenn das Textfeld gebunden sein sollte, kann der Code auch gehen in die 'Form_BeforeUpdate'-Ereignisprozedur (dann mit' Cancel = True'), so dass der Datensatz nicht gespeichert werden kann, wenn der Text nicht gültig ist. – Andre

+1

Gehen Sie dies zu versuchen und melden Sie sich zurück. Getting pumped, dass es tatsächlich funktionieren könnte! –

+0

Danke !!! Das funktioniert großartig! Wow, ich schätze die Hilfe sehr. –