Avatar billede nemlig Professor
16. august 2008 - 10:03 Der er 16 kommentarer og
1 løsning

VBA Userform - kun hele tal i TextBox

Hej.
Er der nogle, som kan hjælpe med, hvordan jeg sikrer, at der kun indtastes hele tal i en TextBox og måske også hvordan jeg begrænser det til 4 tegn.
Avatar billede staal84 Nybegynder
16. august 2008 - 10:52 #1
4 tegn:
properties (på feltet) - maxlength sættes til 4
Avatar billede jkrons Professor
16. august 2008 - 10:58 #2
Læg denne kode på din tekstbox:

Private Sub TextBox1_Change() '
    If TextBox1 = "" Then Exit Sub
    If TextBox1 - Int(TextBox1) <> 0 Then
        MsgBox "Der må kun indtastes hele tal op til fire tegn"
    End If
    If Len(TextBox1) > 4 Then
        MsgBox "Der må kun indtastes hele tal op til fire tegn"
    End If
End Sub
Avatar billede staal84 Nybegynder
16. august 2008 - 11:39 #3
JKRONS:
Jeg kan ikke få først del af din kode til at virke, den går i fejl:
Runtime-error '13'
Type mismatch

Hvad med:
Private Sub TextBox1_Change()
    If IsNumeric(TextBox1) = False Then
        MsgBox ("Kun tal!")
    End If
    If Len(TextBox1) > 4 Then
        MsgBox "Der må kun indtastes hele tal op til fire tegn"
    End If
End Sub
Avatar billede nemlig Professor
16. august 2008 - 12:41 #4
Det virker ikke helt efter hensigten, da jeg også kan indtaste decimaler.
Jeg anvendte en mere enkelt kode tidligere:

Private Sub TextBox1Change()
    OnlyNumbers
End Sub

Men den accepterer også decimaler.
Avatar billede staal84 Nybegynder
16. august 2008 - 13:15 #5
Så kan du vel egentligt nøjes med denne del af JKRONS kode:

Private Sub TextBox1_Change()
   
    If TextBox1 - Int(TextBox1) <> 0 Then
        MsgBox "Der må kun indtastes hele tal op til fire tegn"
    End If
End Sub

Og så sætte en max længde på 4
Avatar billede staal84 Nybegynder
16. august 2008 - 13:16 #6
som gav fejl ved tekst tegn....bare glem det...
Avatar billede staal84 Nybegynder
16. august 2008 - 13:20 #7
Hvad med denne så...:
Private Sub TextBox1_Change()
    If IsNumeric(TextBox1) = False Then
            MsgBox "Der må kun indtastes hele tal op til fire tegn"
    ElseIf TextBox1 - Int(TextBox1) <> 0 Then
            MsgBox "Der må kun indtastes hele tal op til fire tegn"
    End If
   
End Sub
Avatar billede staal84 Nybegynder
16. august 2008 - 13:26 #8
Hvis du ikke vil bruge maxlength:

Private Sub TextBox1_Change()
   
    If IsNumeric(TextBox1) = False Then
            MsgBox "Der må kun indtastes hele tal op til fire tegn"
    ElseIf Len(TextBox1) > 4 Then
            MsgBox "Der må kun indtastes hele tal op til fire tegn"
    ElseIf TextBox1 - Int(TextBox1) <> 0 Then
            MsgBox "Der må kun indtastes hele tal op til fire tegn"
    End If
   
End Sub
Avatar billede nemlig Professor
16. august 2008 - 13:44 #9
Jeg har valgt at anvende maxlength og koden kl. 13:20.

Men jeg kan stadig indtaste 123.45 - altså decimaler.
Avatar billede staal84 Nybegynder
16. august 2008 - 14:05 #10
Hvis du bruger . (punktum), som decimal tegn, så kan du angive det i dine sprogindstillinger i windows, så vil excel også rette sig efter det og give dig en fejl, ved brug af det.
Avatar billede nemlig Professor
16. august 2008 - 14:09 #11
Problemet er, at mit program, skal anvendes på min arbejdsplads på flere hundrede pc'ere. Derfor er det ikke løsningen her.
Kan man ikke definere, hvilke tegn, der må anvendes - altså tegnene fra 0-9
Avatar billede staal84 Nybegynder
16. august 2008 - 14:21 #12
Du skriver at du tidligere har brugt:
Private Sub TextBox1Change()
    OnlyNumbers
End Sub

Det kan jeg ikke få til at virke...:-(, men fandt denne her (i et tidligere spørgsmål), som du måske kan bruge:

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    KeyPressNumbersOnly KeyAscii
End Sub
Avatar billede nemlig Professor
16. august 2008 - 14:43 #13
Jeg kan godt se, at "OnlyNumbers" ikke virker.

Ellers får jeg følgende fejl, når jeg afprøver dit seneste forslag:

Compile Error:
Sub or function not defined
Avatar billede nemlig Professor
16. august 2008 - 15:09 #14
Jeg har yderligere denne defination:

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
Avatar billede nemlig Professor
16. august 2008 - 15:40 #15
Så har jeg det til at virke.
Fandt denne kode:

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
        Case Asc("0") To Asc("9")
        Case Else
            KeyAscii = 0
            MsgBox "Du må kun indtaste TAL!", 16, "Fejl"
    End Select
End Sub
Avatar billede nemlig Professor
16. august 2008 - 15:41 #16
stall84: Tak for din input og tålmodighed. Det lykkedes til sidst. Send venligst et svar.
Avatar billede staal84 Nybegynder
16. august 2008 - 17:02 #17
Godt du fandt et rigtigt svar, så du ikke måtte nøjes...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester