Access-o-Mania

Access-Forum (Deutsch/German) => Access-Hilfe => Thema gestartet von: dralle am Dezember 27, 2014, 19:44:09

Titel: Beschränkungen eines Textfeldes
Beitrag von: dralle am Dezember 27, 2014, 19:44:09
Moin!

Ich versuche die ganze Zeit schon ein Textfeld auf bestimmte Zeichen zu beschränken. Doch mein Code funktioniert einfach nicht. Jemand eine Idee?

Private Sub Mi_8_KeyPress(KeyCode As Integer, Shift As Integer)

If (KeyAscii < 65 Or KeyAscii > 90) And (KeyAscii < 48 Or KeyAscii > 57) And (KeyAscii < 97 Or KeyAscii > 122) Then
Beep
KeyAscii = 0
Call MsgBox("Keine Sonderzeichen erlaubt! Nur Buchstaben und Zahlen.", vbExclamation + vbOKOnly, "Ungültige Zeichen")
End If

End Sub


Das gleich Problem habe ich auch bei der Festlegung der Zeichenlänge!
Wie kann ich die nachfolgenden Subs zusammenfassen?

Private Sub Mi_8_Change()
Dim MaxLänge As Integer

MaxLänge = 30 'anpassen
    If Len(Mi_8.Text) > MaxLänge Then
        MsgBox "IBAN ist zu lang!"
        Mi_8.Text = Left(Mi_8.Text, MaxLänge)
    End If
 
End Sub

Private Sub Mi_8_Change()
Dim MinLänge As Integer

MinLänge = 16 'anpassen
    If Len(Mi_8.Text) > MinLänge Then
        MsgBox "IBAN ist zu kurz!"
        Mi_8.Text = Left(Mi_8.Text, MinLänge)
    End If

End Sub         

Titel: Re: Beschränkungen eines Textfeldes
Beitrag von: MaggieMay am Dezember 27, 2014, 20:42:42
Hallo,

die Mindestlänge eines Textfeldes kannst du nicht im Change-Ereignis prüfen.
Die endgültige Länge eines Textfeldes kannst du erst im AfterUpdate-Ereignis prüfen.

Was die Prüfung der eingegebenen Zeichen betrifft, so solltest du auf gültige und nicht auf ungültige Zeichen prüfen.
Titel: Re: Beschränkungen eines Textfeldes
Beitrag von: bahasu am Dezember 27, 2014, 23:58:06
Hi,

anbei eine nur wenig getestete Routine.
Im Ereignis "Bei Taste ab" steht:

Private Sub IBAN_KeyDown(KeyCode As Integer, Shift As Integer)
    Const ErlaubteZeichen = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

    If KeyCode <> vbKeyLeft And _
        KeyCode <> vbKeyRight And _
        KeyCode <> vbKeyBack And _
        KeyCode <> vbKeyReturn And _
        KeyCode <> vbKeyPageUp And _
        KeyCode <> vbKeyPageDown And _
        KeyCode <> vbKeyDelete And _
        KeyCode <> vbKeyShift Then       ' ggf. und noch weitere erlaubte Tasten abfragen
           

        If InStr(ErlaubteZeichen, Chr(KeyCode)) = 0 Or Shift > 0 Then
            Beep
            ' msgbox usw
            KeyCode = 0
       
        Else
            If Len(Nz(Me.IBAN.Text, "")) >= 3 Then   ' bei 3 ist das Testen einfacher als bei 30: daher bitte anpassen
                Beep
                MsgBox ">=3"             'oder eine sinnvollere Message
                KeyCode = 0
                Me.IBAN.SelStart = 2
            End If
        End If
    End If
End Sub


Vielleicht kann das zur Anregung für weitere eigene Versuche dienen.

Harald

Nachtrag:
Hast Du schon das Eingabeformat versucht?
In der Art: LL###;
Titel: Re: Beschränkungen eines Textfeldes
Beitrag von: database am Dezember 29, 2014, 19:55:36
Hallo,

möchtest du das als eine Art beispielhaftes Feature in deine DB aufnehmen?
Mit der Prüfung der IBAN wirst du sonst ziemliche Probleme bekommen - deren Länge ist nicht generell geregelt!
Wenn du eine Deutsche IBAN prüfst musst du das für 22 Stellen tun, sollte ich ein Auto bei dir bestellen würdest da meine IBAN auf 20 Stellen prüfen müssen und sollte sich ein Schweizer Kunde um einen Wagen bei dir anstellen auf 21 Stellen, bei Norwegern sogar nur 15  :o

Aber schau mal da rein, besonders den Abschnitt 'Validierung der Prüfsumme' kann ich dir da empfehlen.
http://de.wikipedia.org/wiki/IBAN

Wenn du das mit dem Tipp von Harald kombinierst ist's schon fast perfekt  :)