Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Beschränkungen eines Textfeldes

Begonnen von dralle, Dezember 27, 2014, 19:44:09

⏪ vorheriges - nächstes ⏩

dralle

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         


MaggieMay

#1
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.
Freundliche Grüße
MaggieMay

bahasu

#2
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###;
Servus

database

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  :)