簡體   English   中英

VBA Excel做While循環運行時錯誤

[英]VBA Excel Do While Loop Runtime Error


在Excel中使用VBA進行編碼非常新,我要做的是有一個Do While循環,該循環需要用戶輸入,如果它不是數字或小於0,則會返回錯誤消息並再次提示用戶輸入一個值,直到達到前提條件為止。 我嘗試了幾種方法,但似乎無法弄清其背后的細節。 我的代碼當前如下所示:

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的數字,並顯示錯誤消息並再次提示用戶,直到發生這種情況為止。

在此先感謝您的幫助!

對您的代碼進行了幾處更改:

  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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM