2015-08-13 46 views
1

我正在创建一个概率宏,用户在卡片游戏中输入玩家人数。如果输入字符串(例如,Joe),非整数(例如,15.67)或小于0的整数(例如-25),InputBox应该循环。但是,大于0的整数应该终止循环。 (我必须迫使Excel停止输入框,无论用户输入如何。)Do Until Loop InputBox无限循环

我希望InputBox在输入大于0的整数后关闭/退出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 

回答

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 
+0

谢谢,我会尝试一些字符串,小数和各种整数。 –

+0

好吧,我试过了,它可以在所有运行时实例中完美地工作。谢谢! –