2015-08-13 73 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

好吧,我試過了,它可以在所有運行時實例中完美地工作。謝謝! –