Do Until Loop InputBox无限循环

时间:2015-08-13 23:17:17

标签: excel vba excel-vba probability

我正在创建一个概率宏,用户输入纸牌游戏中的玩家数量。如果我输入字符串(ex,Joe),非整数(ex,15.67)或小于0的整数(ex,-25),则InputBox应该循环。但是,大于0的整数应该终止循环。 (无论用户输入如何,我都必须强制终止Excel以停止InputBox。)

一旦输入大于0的整数,我希望InputBox关闭/退出Sub。我在这里做错了什么?

Sub GenerateCards()
Players = InputBox("How many players? Please enter an integer.")
    Do Until TypeName(Players) = "Integer" And Players > 0 ' why does this loop even if both conditions are met (ex, Players=5?)
        Players = InputBox("How many players? Please enter an integer.")
    Loop
End Sub

1 个答案:

答案 0 :(得分:4)

InputBox()始终返回一个字符串,因此TypeName()将始终返回"String"

但是可以测试返回的字符串是否为整数。首先,您可以使用IsNumeric()来测试字符串是否为数值。然后,您可以安全地将其投放到DoubleInteger。实际上,您可以将它转换为两者,然后将它们相互比较。如果它们是相同的,那么你有一个整数值。例如:

Sub GenerateCards()

    Do
        Players = InputBox("How many players? Please enter an integer.")

        If IsNumeric(Players) Then
            If CDbl(Players) = CLng(Players) And Players > 0 Then
                ' Integer > 0 entered. Exit loop...
                Exit Do
            End If
        End If
    Loop

End Sub