In Textbox alleen numerieke waarden

Status
Niet open voor verdere reacties.

Tjerk10

Gebruiker
Lid geworden
24 mrt 2009
Berichten
11
Beste VBA experts,

In het bijgevoegd bestand ben ik een 'userform' aan het ontwerpen. Nu wil ik het mogelijk maken dat er in bepaalde textboxen enkel numerieke waarden ingevoegd kunnen worden. Nu heb ik daarvoor de volgende code gevonden:

Private Sub OnlyNumbers()

If TypeName(Me.ActiveControl) = "TextBox" Then
With Me.ActiveControl
If Not IsNumeric(.Value) And .Value <> vbNullString Then
MsgBox "Sorry, only numbers allowed"
.Value = vbNullString
End If
End With
End If

End Sub

En dan bij de desbetreffende textbox typ ik nog de volgende code:

Private Sub TBBoek_Change()
OnlyNumbers
End Sub

Dit werkt zeer goed zolang de textboxen direct op het userform staan. Maar wanneer de textboxen in een Frame staan die op het userform staan dan werkt deze code niet meer.
Dus voor TBBoek(Textbox) werkt het wel en voor Textbox17 werkt de zelfde code niet.

Mijn vraag is hoe ik dit toch werkende kan krijgen. Alvast vriendelijk bedankt voor jullie hulp.

p.s. het bestand heb ik bijgevoegd.
 

Bijlagen

Tjerk10,

Ik heb het misschien niet op gebruikelijke manier opgelost maar het werkt wel.
Je had het over textBox17 maar dat moet natuurlijk TextBox16 zijn.
Zie het bestandje.
 

Bijlagen

Hoi Wim,

Hartelijk bedankt voor je zeer snelle antwoord. Het is inderdaad op deze manier op te lossen maar dan moet ik voor elke textbox, waarbij ik enkel getallen in wil kunnen vullen, deze code noteren.
Ik had eigenlijk gedacht, dat wanneer ik in een textbox enkel getallen wil kunnen invullen dat ik dan telkens dezelfde subprocedure aanroep, maar misschien is dit niet mogelijk wanneer textboxen in een frame staan. Misschien dat jij hier een antwoord op hebt.

Met vriendelijke groet,

Jelle West
 
Tjerk10,

Ik heb daar even geen antwoord op, was al blij dat dit werkte.
Tenslotte ben ik maar een amateur.
Zo meteen moet ik naar het ziekenhuis , dus heb vanmiddag hier geen tijd meer voor.
Morgen ga ik naar de camping voor een paar weken, dus moet je maar duimen dat een ander hier antwoord op heeft.
Suc6,
 
Beste Tjerk,

Hieronder in rood aangegeven hoe hij wel werkt. Volgens mij wordt in een Frame de ActiveControl het Frame zelf.
Om dat op te lossen dimmen we een Variant als variabele en kennen hier iedere keer de control aan toe waarvoor de Onlynumbers geldt.
Omdat je de OnlyNumbers al aangeeft alleen bij textboxen waarbij dat nodig is hoef je niet meer te checken of het object wel een textbox is.

Code:
Option Explicit

[COLOR="Red"]Dim ControlObject As Variant[/COLOR]

Private Sub OnlyNumbers()

    [COLOR="red"]'If TypeName(Me.ActiveControl) = "TextBox" Then[/COLOR]
        With [COLOR="red"]ControlObject[/COLOR]
            If Not IsNumeric(.Value) And .Value <> vbNullString Then
                MsgBox "Sorry, only numbers allowed"
                .Value = vbNullString
            End If
        End With
    [COLOR="red"]'End If[/COLOR]
   
End Sub

Private Sub CBOE_Change()

Dim i As Integer

Sheets("blad1").Select
Range("C2").Select

For i = 1 To 10
     If CBOE = ActiveCell.Text Then
           ActiveCell.Offset(0, 9).Activate
           TBRekopdr = ActiveCell.Text
     End If
     ActiveCell.Offset(1, 0).Activate
Next i

End Sub


Private Sub TBBoek_Change()
    [COLOR="red"]Set ControlObject = Me.TBBoek[/COLOR]
    OnlyNumbers
End Sub

[COLOR="Red"]Private Sub TextBox17_Change()
    Set ControlObject = Me.TextBox17
    OnlyNumbers
End Sub[/COLOR]

Mvg. René
 
Beste Rene,

Dit is echt geweldig!! Spot on, precies wat ik zocht! Daarnaast wil ik Wim ook nog bedanken voor de moeite.

Mvg,

Jelle West
 
Tjerk10,

Zo zie er zijn heel goede programeurs hier bij helpmij en (amateurs)

A4A,

Het werkt goed je code behalve bij bedrag, daar kan ik gewoon letters in voeren.
Misschien kun je dit ook nog oplossen.
 
Laatst bewerkt:
Beste Wim,

Als je de code ook wilt uitvoeren op de Textbox bedrag dan moet je daar ook de code plaatsen als de Textbox verranderd.

Code:
Private Sub TextBox11_Change()
    Set ControlObject = Me.TextBox11
    OnlyNumbers
End Sub

Mvg. René
 
Nu ik toch op dreef ben, hier gelijk een aanpassing op de OnlyNumbers.
Als je bijvoorbeeld een nummer invulde en per ongeluk een letter aanraakte dan moest je weer van vooraf aan beginnen. Nu laat hij de nummers staan en haalt hij de foutieve ingevoerde letter weg.

Code:
Option Explicit

Dim ControlObject As Variant

Private Sub OnlyNumbers()

    'If TypeName(Me.ActiveControl) = "TextBox" Then
        With ControlObject
            If Not IsNumeric(.Value) And .Value <> vbNullString Then
                MsgBox "Sorry, only numbers allowed"
                .Value = VBA.Strings.Left(.Value, VBA.Strings.Len(.Value) - 1)
            End If
        End With
    'End If
   
End Sub

Mvg. René
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan