Invoermasker (alfa)nummeriek maar géén spatie?

Status
Niet open voor verdere reacties.

jbusser

Gebruiker
Lid geworden
23 feb 2007
Berichten
147
Hallo,
Ik wil een invoemasker gebruiken op een tekstveld waarin alleen alfanummerieke en nummerieke karakters mogen worden gebruikt.
Echter, wanneer ik aaaaaaaa als invoermasker gebruik mogen er óók spaties worden gebruikt.
Dat wil ik eigenlijk liever niet!
Het veld mag helemaal gevuld zijn met cijfers en letters maar zonder (lees)tekens, en dus ookm spaties.
Kan dat?
 
Heb je de link zelf wel gelezen?

[FONT=&amp]A[/FONT][FONT=&amp]De gebruiker moet een letter of een cijfer invoeren.[/FONT]
[FONT=&amp]a[/FONT][FONT=&amp]De gebruiker kan een letter of een cijfer invoeren.[/FONT]

Er wordt dus niet over spaties gerept. Zelf vang ik het af met VBA.
 
Laatst bewerkt:
Het blijft een kwestie van interpretatie. Ik heb moet gelezen als "spatie niet toegestaan (want geen letter of cijfer)".

VBA is uiteraard ook een oplossing.
 
Peter had wel gelijk: bij gebruik van AAAA kun je geen spaties invoeren en bij aaaa wél.
Echter ben je bij gebruik van AAAA verplicht om 4 karakters te gebruiken, bij aaaa gewoon maximaal 4.
Ik moet wel de vrijheid van stringkeuze houden.
Dus ben ik inderdaad maar even gaan scripten maar kom er toch niet helemaal uit.
Ik heb een scriptje gemaakt om een ingevoerde string te bekijken en ongewenste karakters te verwijderen.
Echter: script werkt niet (MSGBOX geeft gewoon de invoer met "verboden" tekens: Wat doe ik nu fout?
Code:
Private Sub INVOERveld_AfterUpdate()
    Dim DelChar As String
    Dim Str As String
    Dim I As Integer
    DelChar = "-_., "
    For I = 1 To Len(INVOERveld)
        Str = Replace$(INVOERveld, Mid$(xChars, I, 1), "")
    Next
    MsgBox Str
    RemoveSpecial = Str
End Sub
 
Ik zie niet dat je iets doet met DelChar in de loop.

Misschien ook maar Option Explicit gebruiken, zodat je geen ongedefinieerde variabelen kunt gebruiken?
 
Nee,
Ik heb het gevonden,
Moet zijn:

Code:
Private Sub INVOERveld_AfterUpdate()
    Dim DelChar As String
    Dim Str As String
    Dim I As Integer
    DelChar = "-_. ,"
    For I = 1 To Len(INVOERveld)
        INVOERveld = Replace$(INVOERveld, Mid$(DelChar, I, 1), "")
    Next
    MsgBox INVOERveld
    RemoveSpecial = INVOERveld
End Sub

Zo werkt hij wel (ik had verkeerde variabele gebruikt...:mad:)
Heren: Bedankt weer!:thumb:
 
Laatst bewerkt:
jbusser,

Denk niet dat u hiermee alle ongewenste tekens mee weg haalt.
b.v. (&*%$#!?){}[]
probeer deze code maar eens:


Code:
Option Compare Database
Option Explicit
Dim Q As Integer

Private Sub Form_Open(Cancel As Integer)
DoCmd.Maximize
End Sub

Private Sub Getal_Change()
Dim X As Integer
Me.Refresh
X = Nz(Len(Me.Getal), 0)
    If Q = 2 Then
        Me.Getal = Mid$(Me.Getal, 1, Len(Me.Getal) - 1)
       Q = 0
       GoTo uit
    End If
    If X > 0 Then
        Select Case Asc(Right(Me.Getal, 1))
               Case 48 To 57
                    GoTo uit
               Case 64 To 91
                    GoTo uit
               Case 97 To 122
                    GoTo uit
               Case Else
               Me.Getal = Mid$(Me.Getal, 1, Len(Me.Getal) - 1)
        End Select
    End If
uit:
Me!Getal.SelStart = Me!Getal.SelLength
End Sub

Private Sub Getal_KeyDown(KeyCode As Integer, Shift As Integer)
Q = Shift
End Sub

Groetjes,
 
Ik doe het anders (zal niet zeggen slimmer ;))
Code:
Private Sub Postcode_Change()
    With Me.Postcode
        If Right(.Text, 1) = " " Then
            .Text = Trim(.Text)
        End If
    End With
End Sub
Ik vang de ellende dus al af vóórdat de gebruiker het veld verlaat. En deze techniek kun je uiteraard ook gebruiken om andere voorwaarden af te dwingen, bijvoorbeeld als de eerste vier tekens een getal moeten zijn, en de volgende twee een letter. (Inderdaad, een postcode. En die kan uiteraard ook met een invoermasker).
 
Nog een variant gebaseerd op de oplossing van pletter (dus alleen Letters en Cijfers toestaan, verder niks)
Code:
Private Sub Postcode_Change()
   On Error GoTo Hell
    With Me.Postcode
        If Right(.Text, 1) = " " Then
            .Text = Trim(.Text)
        ElseIf (Asc(Right(.Text, 1)) >= 48 And Asc(Right(.Text, 1)) <= 57) _
            Or (Asc(Right(.Text, 1)) >= 65 And Asc(Right(.Text, 1)) <= 92) _
            Or (Asc(Right(.Text, 1)) >= 97 And Asc(Right(.Text, 1)) <= 122) Then
        Else
            .Text = Left(.Text, Len(.Text) - 1)
        End If
    End With
Hell:
End Sub
 
Oplossingen genoeg dus.
De oplossing die ik hierboven schetste is voor mij wel ideaal, eigenlijk.
Ik bedacht mij later dat ik mogelijk in sommige gevallen wél (back-)slashes moet toestaan.
in het script kan ik de te verwijderen karakters, toegewezen aan de variabele DelChar nu heel specifiek aanpassen.
Wellicht dat ik die waarde in instellingen gewoon aanpasbaar maak.
 
Kan in mijn code ook, kwestie van de ASCII code toevoegen :). en die van pletter. Persoonlijk hou ik niet zo van een AfterUpdate. Geef mij maar voorkomen, dat is (bijna altijd) beter dan genezen :).
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan