• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

TextBox invoer beperken

Status
Niet open voor verdere reacties.

evhaarst

Gebruiker
Lid geworden
25 jul 2001
Berichten
112
Ik heb een textbox in een userform waarin een waarde moet worden ingevuld. Het mag geen tekst zijn en het moeten getallen zijn tussen 0 en 9999, met maximaal 4 cijfers, maar ook maximaal 2 getallen achter de komma (alleen voor de kleine getallen is het zinvol om achter de komma iets te zetten).
In een werkbladcel zou ik via een validatie zoiets kunnen doen geloof ik, maar hier ligt dat anders. Hoe kan ik zulke beperkingen opgeven? Of moet ik dan werken met een ander object dan een textbox?
 
Dit vergt wat programmeer werk.
Je kan door op je textbox te dubbel klikken in VB komen.
Dan selecteer je rechts boven waar change staat de procedure KeyDown.
De variabele KeyCode bevat de ascii waarde van de ingeklopte toet.
Je kan dan een stukje code verzinnen die b.v. er zo uitziet.:

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case Asc("A")
'gebruiker drukt op a
Case Asc("B") To Asc("Z")
'enige letter tussen B en Z
Case Else
KeyCode = "" 'Haalt elke ander toets weg
End Select

End Sub

Let op dat Hoofdletters een ander ascii waarde hebben dan kleine.


Lengtes kun je bepalen met Len(TextBox1.Text)
 
ik krijg een foutmelding op de regel
KeyCode = "" 'Haalt elke ander toets weg
ik begrijp wel waar je heen wil, maar kreeg het nog niet zelf voor elkaar. Ik snap ook niet waarom de "a" apart staat, en de overige letters bij elkaar, maar dat ligt wellicht aan de ASCII-lijst?
Overigens geeft jouw syntax alleen letters, het moeten juist alleen cijfers zijn, met evt een punt of komma (ik weet niet hoe excel hier mee omgaat) erin, maar incl. komma mogen het maximaal 4 tekens zijn. Dat laatste is dus inderdaad nu ingesteld met Len() etc. Dus nu nog de cijfers.
 
Hoi,
De fout op de regel KeyCode = "" ligt waarschijnlijk aan mijn snelle codering van toen :)
Het had moeten zijn
KeyCode = Empty

Ik had de a appart gezet als voorbeeld. :)
Je kan dus voor de a iets anders programmeren als voor de rest.

De code van een backspace is 8 en van een pijl naar links is 37. Waarom de code van een punt anders dan de ascii tabel weet ik niet. Misschien met windows tabel te maken. Met breakpoint kun je het checken.

voor cijfers kun je dus als volgt doen:

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If Len(TextBox4.Text) >= 4 Then
'lengte beperking
If KeyCode <> 8 And KeyCode <> 37 Then
KeyCode = Empty
End If
End If

Select Case KeyCode
Case 190 Or 110 'Asc(".") punt is blijkbaar 190 en niet 46 zoals de ascii tabel zegt 110 is die op de num pad
'het moet een komma worden
KeyCode = 188
Case 188 'Asc(",") komma is blijkbaar 188 en niet 44
'gebruiker drukt op ,
Case Asc("0") To Asc("9") 'ascii volgorde aanhouden
'een nummer
Case 8, 37
'backspace en pijl links (anders haalt de else de keycode leeg)
Case Else
KeyCode = Empty 'Haalt elke ander toets weg
End Select
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan