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?
Misschien AAAAAA gebruiken?
Zie https://support.microsoft.com/nl-nl/...2-4a47832de8da
Groeten,
Peter
Heb je de link zelf wel gelezen?
A De gebruiker moet een letter of een cijfer invoeren. a De gebruiker kan een letter of een cijfer invoeren.
Er wordt dus niet over spaties gerept. Zelf vang ik het af met VBA.
Laatst aangepast door OctaFish : 31 januari 2023 om 15:02
Gebruik de QUOTE knop alleen als je iets wit citeren.
Op deze pagina kun je zien hoe je met TAGS werkt.
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.
Groeten,
Peter
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?
Groeten,
Peter
Nee,
Ik heb het gevonden,
Moet zijn:
Zo werkt hij wel (ik had verkeerde variabele gebruikt...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)
Heren: Bedankt weer!![]()
Laatst aangepast door jbusser : 31 januari 2023 om 10:39
jbusser,
Denk niet dat u hiermee alle ongewenste tekens mee weg haalt.
b.v. (&*%$#!?){}[]
probeer deze code maar eens:
Groetjes,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
Ik doe het anders (zal niet zeggen slimmer)
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).Code:Private Sub Postcode_Change() With Me.Postcode If Right(.Text, 1) = " " Then .Text = Trim(.Text) End If End With End Sub
Gebruik de QUOTE knop alleen als je iets wit citeren.
Op deze pagina kun je zien hoe je met TAGS werkt.
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
Gebruik de QUOTE knop alleen als je iets wit citeren.
Op deze pagina kun je zien hoe je met TAGS werkt.
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
.
Gebruik de QUOTE knop alleen als je iets wit citeren.
Op deze pagina kun je zien hoe je met TAGS werkt.