2017-05-30 42 views
0

我想了解爲什麼下面的代碼沒有給我預期的行爲。奇怪的流程與錯誤處理與VBA輸入框?

我想問用戶一個十進制數(雙)。我在下面有一個錯誤處理程序,但是這個程序的行爲方式,當我輸入一個字或數字時它仍然會拋出錯誤。當我沒有放入任何東西時它會捕獲錯誤(空輸入)。

當我刪除if條件,它會按預期工作,但我不知道如何捕捉空的用戶輸入。

任何想法將不勝感激!

Sub MainTask() 

Dim userInput As Double 

TryAgain: 
    On Error GoTo ErrorHandler 
    userInput = InputBox("What is the amount purchased you would like to search for? ($)") 
    If Len(userInput) = 0 Then 
     Exit Sub 
    End If 
    MsgBox "You have entered a valid value!" 
Exit Sub 

ErrorHandler: 
MsgBox "Please enter a valid value." 
GoTo TryAgain 

End Sub 
+0

對此深感抱歉。它是'vba' – MathHopeful

+1

當你在錯誤處理程序中的'GoTo TryAgain'時,你仍然在當前錯誤的錯誤處理程序中,所以後面的錯誤是未處理的。用'Resume'代替'GoTo TryAgain'會解決這個問題,但它不是一個很好的做事方式,例如用戶會在取消按鈕上出現錯誤,你應該使用一個字符串並用'「」 'IsNumeric()' –

+0

InputBox返回一個字符串。您不能將返回值分配給Double。如果它不是一個數字,它會拋出一個錯誤。 –

回答

6

我不喜歡錯誤處理,因爲它會覆蓋其他問題:

Sub MainTask() 

Dim userInput As Variant 
Dim output As Double 

Do 
    userInput = InputBox("What is the amount purchased you would like to search for? ($)") 
    If Len(userInput) = 0 Then Exit Sub 
    If Not IsNumeric(userInput) Then MsgBox "Please enter a valid value."   
Loop Until IsNumeric(userInput) 

output = userInput 
MsgBox "You have entered a valid value! " & output 

End Sub 
+0

謝謝你太棒了! – MathHopeful

+1

最好的錯誤處理==沒有錯誤處理。 +1以避免錯誤情況。 –

+0

@ Mat'sMug有時候,使用'Application.WorkSheetFunction.Match()'時我喜歡使用'On Error Resume Next'並立即打開它,然後測試是否發生了錯誤,查看匹配是否找到任何東西或不。 –