it-swarm.com.de

Prüfen Sie, ob eine Stringvariable einen ganzzahligen Wert hat

Ich arbeite an einem Projekt, bei dem Kinder eine Nachricht an den Weihnachtsmann senden können. Wenn sie im AGE-Feld eine Zeichenfolge anstelle einer Ganzzahl eingeben, stürzt das Programm ab und gibt die Konvertierung von der Zeichenfolge "[exampleString]" in den Typ "Double" zurück. Ist dies nicht möglich? eine ganze Zahl eingegeben oder nicht? Dies ist der 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

Danke, Kai :)

11

Ein sehr einfacher Trick ist, probiere parse den String als Integer. Wenn es gelingt, ist es eine ganze Zahl (Überraschung).

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

Sie können die folgenden zwei Tests durchführen, um ziemlich sicher zu sein, dass die Eingabe, die Sie erhalten, eine Ganzzahl ist:

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!"

Die Funktion InStr gibt den Wert Null zurück, wenn die gesuchte Zeichenfolge nicht gefunden wird. Wenn Sie diesen Test mit IsNumeric kombinieren, schließen Sie auch die Möglichkeit aus, dass ein Gleitkommadatentyp eingegeben wurde.

4
rwells

Sie können dies verwenden.

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 ist in VB integriert und gibt true/false zurück

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

Wenn Sie kein Ergebnis benötigen, ersetzen Sie es einfach durch 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

Wenn Sie nach Styxxys Antwort suchen, wenn Sie als Byte statt als Ganzzahl parsen, werden auch das negative Alter und das maximale Alter von 255 gleichzeitig überprüft.

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