web-dev-qa-db-fra.com

Vérifier si une variable de chaîne a une valeur entière

Je travaille sur un projet qui permet aux enfants d'envoyer un message au père Noël. Malheureusement, s’ils entrent une chaîne au lieu d’un nombre entier dans le champ AGE, le programme se bloque et renvoie la conversion de la chaîne "[exampleString]" en "Double" n’est pas valide . Y at-il un moyen de vérifier s’ils ont entré un entier ou pas? Ceci est le code. 

If childAge > 0 And childAge < 150 Then
    fmSecA2 = "Wow! You are already " & childAge & " years old? You're growing to be a big " & childGender & " now! "
Else
    fmSecA2 = "Erm, I couldn't really understand your age. Are you making this up? Ho ho ho!"
End If

Merci, Kai :)

11
Kai Silverthorne

Une astuce très simple consiste à essayez d'analyser la chaîne en tant qu'entier. Si cela réussit, c'est un entier (surprise surprise).

Dim childAgeAsInt As Integer
If Integer.TryParse(childAge, childAgeAsInt) Then
    ' childAge successfully parsed as Integer
Else
    ' childAge is not an Integer
End If
37
Styxxy

Vous pouvez effectuer les deux tests suivants pour être raisonnablement certain que l'entrée que vous obtenez est un entier:

If IsNumeric(childAge) AndAlso (InStr(1, childAge, ".") <> 0) Then
    fmSecA2 = "Wow! You are already " & childAge & " years old? You're growing to be a big " & childGender & " now! "
    If childAge < 0 OrElse childAge > 150 Then
        fmSecA2 = "I don't believe it's possible to be" & childAge & " years old..."
    End If
Else
    fmSecA2 = "Erm, I couldn't really understand your age. Are you making this up? Ho ho ho!"

La fonction InStr renvoie zéro si elle ne trouve pas la chaîne recherchée. Ainsi, en combinant ce test avec IsNumeric, vous excluez également la possibilité de la saisie de certains types de données à virgule flottante.

4
rwells

Vous pouvez utiliser ceci.

Sub checkInt() 
    If IsNumeric(Range("A1")) And Not IsEmpty(Range("A1")) Then 

        If Round(Range("A1"), 0) / 1 = Range("A1") Then 
            MsgBox "Integer: " & Range("A1") 
        Else 
            MsgBox "Not Integer: " & Range("A1") 
        End If 
    Else 
        MsgBox "Not numeric or empty" 
    End If 
End Sub 
1
Quentin Perez

IsNumeric est intégré à VB, et retournera un vrai/faux

If IsNumeric(childAge) AndAlso (childAge > 0 And childAge < 150) Then
    fmSecA2 = "Wow! You are already " & childAge & " years old? You're growing to be a big " & childGender & " now! "
Else
    fmSecA2 = "Erm, I couldn't really understand your age. Are you making this up? Ho ho ho!"
End If
1
mmeasor

Pour compléter la réponse de Styxxy, si vous n'avez pas besoin d'un résultat, remplacez-le par vbNull:

If Integer.TryParse(childAge, vbNull) Then
1
Warchlak
Dim Input 

 Input = TextBox1.Text
 If Input > 0 Then 
   ............................
   ............................
 Else 
   TextBox2.Text = "Please only enter positive integers"
 End If
0
SAm

À partir de la réponse de Styxxy, si vous analysez sous forme d'octet plutôt que d'entier, il vérifie également les âges négatifs et l'âge maximal de 255 en une fois.

Dim childAgeAsByte As Byte
If Byte.TryParse(childAge, childAgeAsByte) Then
    ' childAge successfully parsed as Byte
Else
    ' childAge is not a Byte
End If

Kristian

0
Kristian