KeyPress in VBA

Status
Niet open voor verdere reacties.

ReilingJ

Gebruiker
Lid geworden
31 mei 2007
Berichten
168
Hallo,

ik wil inputcontrole doen op een tekstvak en wel zodanig dat alleen cijfers ingevoerd kunnen worden.
Hiervoor wil ik gebruik maken van "KeyPress" . Bij iedere toetsaanslag wordt gecontroleert of de ingave een cijfer is. Is dat niet het geval dan moet de ingave worden geweigerd.
onderstaande oplossing werkt bijna. Echter het eerste karakter wordt wel geaccepteerd ook als het geen cijfer is. Weet iemand de volledige oplossing?



Private Sub TxtkopieOpp1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Chr(KeyAscii) < 0 Or Chr(KeyAscii) > 9 Then
TxtkopieOpp1.SelStart = 0
TxtkopieOpp1.SelLength = TxtkopieOpp1.TextLength
TxtkopieOpp1.Cut

Beep

End If
End Sub

Jan.

N.b. punten en komma's zijn niet toegestaan!
 
Laatst bewerkt:
in de properties van je textbox kan je je input mask zetten of de validation rule gebruiken of inderdaad de keypress event programmeren. De eerste twee zijn een stuk simpeler.
 
Guus,

bedankt voor je antwoord.
deze oplossing kende ik toevallig ook. Je kunt ook nog dacht ik gebruik maken van e.KeyChar en e.handled.
Jammer genoeg geldt dit alleen voor visual basic, Voor zover ik weet niet voor VBA.

Op dit forum heb ik ook al een VBA oplossing gevonden voor controle op nummerieke getallen. Helaas is dit voor mij geen geen oplossing omdat ik alleen cijfers als input wil accepteren,

groet Jan.
 
Access? Excel? Word? Visio? ...?
Buiten VB heb ik met Access de meeste ervaring. Daarin werkt de door mij genoemde oplossing in ieder geval!
 
Naast VB doe ik nog iets in VBA voor Word, VBA voor Acces ken ik weer niet.
Lang leve de standaardisatie!

En inderdaad voor VB kan ik het alleen maar met je eens zijn, jammer genoeg vind ik de oplossing in VBA voor Word niet.

Ik heb het wel op kunnen lossen (punten en komma's verwijderen met replace) maar dit verdiend de schoonheidsprijs zeker niet. oplossing past ook niet in een module.

Misschien weet iemand nog een echte oplossing.


Groet Jan.
 
Laatst bewerkt:
Hallo,
Nog maar eens een poging:

ik heb onderstaande op dit forum gevonden:

Private Sub TextBox1_Change()
Tekst
End Sub

Private Sub TextBox2_Change()
Tekst
End Sub

Private Sub Tekst()
If Not IsNumeric(ActiveControl) Then If Len(ActiveControl) Then ActiveControl = Left(ActiveControl, Len(ActiveControl) - 1)

End Sub

Valt dit te combineren met:

If KeyAscii < 48 Or KeyAscii > 57 then .....

In plaats van

If Not IsNumeric(ActiveControl) Then



Ook heb ik het volgende bedacht wat ook niet wil werken:


Private Sub TextBox1_Change()
geselecteerdeNaam.Text = verwijderfunctie(naam:=txtNaam.Text)
TextBox1.Text = geselecteerdeNaam
End Sub


Private Function verwijderfunctie(ByVal naam As String) As String
Dim geselecteerdeNaam As String
Dim lengteNaam As Integer
Dim index As Integer

geselecteerdeNaam = ""
lengteNaam = 0
lengteNaam = naam.lenght

For index = 0 To lengteNaam - 1
If Asc(naam.Substring(index, 1)) < 48 And Asc(naam.Substring(index, 1)) > 58 Then

geselecteerdeNaam = geselecteerdeNaam & naam.Substring(index, 1)

End If
Next






Jan.
 
Laatst bewerkt:
Toch nog maar eens wat zitten pielen, dit werkt in ieder geval:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Chr(KeyAscii) <> 0 And Chr(KeyAscii) <> 1 And Chr(KeyAscii) <> 2 And Chr(KeyAscii) <> 3 _ And Chr(KeyAscii) <> 5 And Chr(KeyAscii) <> 6 And Chr(KeyAscii) <> 7 And Chr(KeyAscii) <> 8 _ And Chr(KeyAscii) <> 9 Then
KeyAscii = 0
End If

End Sub

Alleen werkt het niet in subprocedure, heeft iemand een idee hoe dit ook nog te realiseren?

Groet Jan.
 
Hoi,

Misschien kun je het op deze manier proberen

Public sub textbox1_keypress(keyascii As Integer)
If keyascii = 8 Or keyascii = 127 Then
Else
If keyascii < Asc("0") Or keyascii > Asc("9") Then
If keyascii = 13 Then
Else
keyascii=0
End If
End If
End If
End sub
 
@Koen B,

welkom op Helpmij.:)

Berichten van maart vorig jaar mag je met rust laten, deze zijn niet actueel meer.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan