Alleen bedragen in textbox toestaan

Status
Niet open voor verdere reacties.

SjonR

Verenigingslid
Lid geworden
10 nov 2016
Berichten
3.279
Beste helpers,

Ik kraak mijn brein, maar helaas zonder resultaat.

Ik heb de volgende code om te voorkomen dat er iets anders dan bedragen wordt ingevuld in een textbox. Maar dit maakt het invullen van een negatief bedrag onmogelijk.
Code:
If Not IsNumeric(TextBox14.Value) Then MsgBox "Je mag hier geen tekst invullen!"

Hoe kan ik ervoor zorgen dat er wel een negatief bedrag mag worden ingevuld, maar dat letters nog steeds uit den boze zijn.
 
Gisteren uitgebreid aan de orde geweest: http://www.helpmij.nl/forum/showthread.php/923105-TextBox-formatteren-naar-nummers

Maak een keuze uit een van de _Keypress gebeurtenissen

Code:
Private Sub TextBox1_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, ByVal Action As MSForms.fmAction, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
  If Action = 2 Then Cancel = True
End Sub

'   Alleen cijfers
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii < 48 Or KeyAscii > 58 Then KeyAscii = 0
End Sub

'   Alleen cijfers en punt
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If (KeyAscii < 48 And KeyAscii <> 46) Or KeyAscii > 58 Then KeyAscii = 0
End Sub

'   Alleen cijfers en komma
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If (KeyAscii < 48 And KeyAscii <> 44) Or KeyAscii > 58 Then KeyAscii = 0
End Sub

'   Alleen cijfers en negatief teken op de eerste plaats
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii < 48 And (KeyAscii <> 44 And Len(TextBox1) <> 0) Or KeyAscii > 58 Then KeyAscii = 0
End Sub
 
Laatst bewerkt:
SNB,

bedankt weer!

Die onderste is wat ik zoek. Had nog nooit van een Keypress-event gehoord. Hier ga ik me even in verdiepen.

Gr.

Sjon
 
Ik hoorde het kraken tot hier:D

nog een manier
Code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
    Case Asc("0") To Asc("9")
    Case Asc("-")
        If InStr(1, TextBox1.Text, "-") > 0 Or Me.TextBox1.SelStart > 0 Then
            KeyAscii = 0
            MsgBox "Het - teken moet vooraan staan"
        End If
    Case Asc(".")
        If InStr(1, TextBox1.Text, ".") > 0 Then
            KeyAscii = 0
            MsgBox "Fout in de decimalen"
        End If
    Case Else
        KeyAscii = 0
        MsgBox "Je mag hier geen tekst invullen!"
End Select
End Sub
 
Ook jij bedankt Philiep,

De code van SNB heeft echter mijn voorkeur, want die zorgt ervoor dat tekst invullen überhaupt niet mogelijk is. Dan is een msgbox ook niet nodig.

Gr.

Sjon
 
Het voordeel van de keypress-methode is dat al voordat er iets in het tekstvak wordt gezet wordt gecontroleerd of de ingedrukte toets wel toegestaan is. Er hoeft dus geen interaktie met het tekstvak plaats te vinden en al helemaal geen 'onterecht' teken achteraf te worden verwijderd.
 
@SjonR
In mijn vbtje is het ook onmogelijk, de tekstboxen zijn ook niet nodig, is gewoon info.
 
Iets makkelijker en logischer:

Code:
If UCase(TextBox14.Value) <> LCase(TextBox14.Value) Then MsgBox "Je mag hier geen tekst invullen!"

Tardis
 
@Dotch,

Code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
    Case 48 To 59, 44, 46
    Case 45
       If Len(TextBox1) > 0 Then
           KeyAscii = 0
           c00 = "een minteken alleen vóór het getal"
        End If
    Case Else
      KeyAscii = 0
      c00 = "alleen getallen en decimaaltekens"
    End Select
    
    Caption = c00
    TextBox1.ControlTipText = c00
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan