2015-10-21 610 views
1



在Excel中用VBA進行編碼很新穎,我想要做的是有一個Do While循環接受用戶輸入,如果它不是數字或小於0返回一條錯誤消息並重新提示用戶輸入一個值,直到它達到先決條件。我嘗試過幾種方法,但似乎無法弄清楚背後的細節。我的代碼目前看起來像:VBA Excel Do while循環運行時錯誤

Function getQuantity(prompt) 

Dim quantity As String 

quantity = InputBox(prompt) 

Do While quantity < 0 
    If Not IsNumeric(quantity) Then 
     MsgBox ("Incorrect Value, Numbers Only Please!") 
     quantity = InputBox(prompt) 
    End If 
Loop 

End Function 

當寫這樣我得到運行時錯誤。

如果我只是用:

Function getQuantity(prompt) 

Dim quantity As String 

quantity = InputBox(prompt) 

If Not IsNumeric(quantity) Then 
     MsgBox ("Incorrect Value, Numbers Only Please!") 
     quantity = InputBox(prompt) 
End If 

End Function 

這一點,它做什麼,我想,除了它只能重新提示繼續之前曾經因爲它不是在一個循環。基本上我希望它循環,直到它得到一個0或更大的數字,並顯示錯誤消息並重新提示用戶,直到發生這種情況。

在此先感謝您的幫助!

+0

「當這樣寫時,我得到運行時錯誤。」如果只是有一種方式,我們可以看到這些錯誤...掛在秒,我只是有一個想法 - 你可以***發佈他們與你的問題!! *** :-)在任何情況下,在檢查它是否爲數字之前執行'Do While quantity <0' * *可能不起作用。 – paxdiablo

回答

1

已經做出了一些改動你的代碼:

  1. 使用在循環中的值的測試或運算IsNumeric函數:Val函數將任何非數值轉換爲零所以這語句允許您檢查用戶是否輸入了一個數字,如果是,是否爲零或以上。
  2. 修改該信息以向用戶明確說明小於零的任何內容都是無效的,以前他們可能輸入了負數並且被告知他們根本沒有輸入數字。
  3. 我也已經在轉換它之後返回了值,以前你沒有從函數返回它。

您可能還想考慮允許用戶使用輸入框中的取消選項。這將返回一個空字符串,並且如果點擊取消並且被不斷告知輸入一個數字,它將會讓用戶感到困惑和有點惱人。在這種情況下,你可能會返回一個默認值,這取決於你如何使用這個函數。

此外,此功能目前允許用戶輸入整數和小數,大概這是你所需要的。爲你的函數使用特定的類型(以及它們的參數)是一個好主意,所以將As String添加到提示參數中並且可能使用As Double作爲函數將使代碼更加清晰,併爲您提供更多的編譯時安全。

Function getQuantity(prompt) 

Dim quantity As String 
quantity = InputBox(prompt) 

Do While Not IsNumeric(quantity) Or Val(quantity) < 0 
    MsgBox ("Incorrect value, please enter a valid number of zero or above") 
    quantity = InputBox(prompt) 
Loop 

getQuantity = Val(quantity) 

End Function 
+0

謝謝你,完美地解決了這個問題。也感謝你詳細闡述我出錯的地方和你所做的改變,非常大的幫助! –