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 :)
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
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.
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
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
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
Dim Input
Input = TextBox1.Text
If Input > 0 Then
............................
............................
Else
TextBox2.Text = "Please only enter positive integers"
End If
À 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