验证最小和最大数量之间的输入框条目

时间:2018-10-17 06:48:39

标签: excel vba

我将InputBox用作月份(“ m”)的“期间”。

当我尝试将其用于“年”(“ YYYY”)时,它无法正常工作。

我的“年”代码(与“期间”相同,只是不同的值和变量):

Dim VYear as variant
Dim defY as variant

defY = Format(DateAdd("YYYY", 0, Now), "YYYY")
VYear = InputBox("Year covered","Year",defY)
If VYear > 2014 And VYear < defY Then
    Range("I1").Value = VYear
ElseIf VYear = "" Then
    Exit Sub
Else
    Do Until VYear > 2014 And VYear < defY
    MsgBox "Please enter a year not earlier than 2015 and not later than this year"
    VYear = InputBox("Year covered")
    Loop
End If

它确实为我提供了默认值2018。当我尝试输入错误的值时,它会按预期在MsgBox中显示消息,但是它将不再接受任何值,即使是年份“ 2018”。

循环进行:MsgBox(请输入...。),然后依次是InputBoxMsgBox

我故意使用As Variant,以便即使用户输入字母,也不会出现“类型不匹配” 的错误。

1 个答案:

答案 0 :(得分:2)

它应该看起来像这样……

UserManager<ApplicationUser>
  • 它使用一个Option Explicit Public Sub AskForYear() Dim InputValue As Variant 'needs to be variant because input is FALSE if cancel button is pressed Dim DefaultYear As Integer DefaultYear = Year(Date) 'Get the year of the current date today Do InputValue = Application.InputBox(Prompt:="Please enter a Year between 2015 and " & DefaultYear & "." & vbCrLf & "Year covered:", Title:="Year", Default:=DefaultYear, Type:=1) If VarType(InputValue) = vbBoolean And InputValue = False Then Exit Sub 'cancel was pressed Loop While InputValue < 2015 Or InputValue > DefaultYear Range("I1").Value = InputValue 'write input value End Sub 循环,该循环至少运行一次(注意条件在Do部分中)。它一直要求提供从2015年到今年之间的日期,直到达到标准为止。然后它将继续写入范围。

  • 请注意,如果用户按下“取消”按钮,则有一个取消条件可以捕获。然后,它退出子程序而不写入范围。

      

    这仅是针对您的特定情况(要求一年)的假设,但...
      对于此标准,如果您打算接受Loop While作为数字输入,则仅测试If InputValue = False是不够的。因此,您还需要测试0类型:
      Boolean
      这是因为If VarType(InputValue) = vbBoolean会自动转换为False

  • 请注意,我使用的是0而不是Application.InputBox。这些是2个完全不同的:

    InputBox

    Application.InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextID, Type) 'see the different parameters InputBox(Prompt, Title, Default, XPos, YPos, HelpFile, Context) As String 中,您可以提供一个Application.InputBox参数,我将其设置为Type,这意味着它仅接受数字(请参阅Application.InputBox Method)。仅凭1,您将无法做到这一点。

  • 我建议使用有意义的变量名,这样可以更轻松地阅读和维护代码。如果确实需要,也只能使用InputBox。在这种情况下,是因为Variant可以返回Application.InputBox(取消按钮)或数字(输入)。

  • 另一建议是始终为Boolean指定工作表,例如Range,否则Excel会猜测您的意思是哪个工作表,并且很容易失败。