我将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
(请输入...。),然后依次是InputBox
和MsgBox
。
我故意使用As Variant
,以便即使用户输入字母,也不会出现“类型不匹配” 的错误。
答案 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会猜测您的意思是哪个工作表,并且很容易失败。