宏执行后,我的宏需要输入。但是,如果用户按下取消,则宏将在没有此信息的情况下执行,这会在数据中留下漏洞。这是我最好的猜测,但它并不阻止用户取消并仍然执行:如何在执行宏之前需要输入到我的InputBox?
Do Until Not IsEmpty(myWknum)
DoEvents
myWknum = InputBox("Please enter week number")
Loop
宏执行后,我的宏需要输入。但是,如果用户按下取消,则宏将在没有此信息的情况下执行,这会在数据中留下漏洞。这是我最好的猜测,但它并不阻止用户取消并仍然执行:如何在执行宏之前需要输入到我的InputBox?
Do Until Not IsEmpty(myWknum)
DoEvents
myWknum = InputBox("Please enter week number")
Loop
如果当用户取消InputBox
,要退出该子程序,而不处理干啥摹进一步,使用Exit Sub
声明:
Sub Test
Dim myWkNum As String
myWkNum = InputBox("Please enter week number")
If myWkNum = "" Then Exit Sub
'...
'other code
'...
End Sub
,或者与一些效度检验:
Sub Test
Dim myWkNum As String
Do
myWkNum = InputBox("Please enter week number")
If myWkNum = "" Then
Exit Sub
ElseIf IsNumeric(myWkNum) Then
If myWkNum > 0 And myWkNum < 54 And Int(myWkNum) = myWkNum Then
Exit Do
End If
End If
Loop
'...
'other code
'...
End Sub
不错的检查'Int()'太:D – BruceWayne
@BruceWayne我必须一次性测试! :D(而且我生活在现实世界中,有时也需要一个星期53)) – YowE3K
在Loop
行之前加上此行。
if myWknum="" then Exit Do
完全相反 – omegastripes
哦,你试图阻止他们使用取消?这对用户来说会非常恼人。 – braX
这将迫使一个值,该值必须是一个数字:
Sub t()
Dim myWknum As String
Do While myWknum = "" Or Not IsNumeric(myWknum)
myWknum = InputBox("Please enter week number")
Loop
End Sub
而这一点,多一点冗长(而且也许可以更有效率),将迫使用户输入一个从1到52:
Sub t()
Dim myWknum As String
Do While myWknum = "" Or Not IsNumeric(myWknum)
myWknum = InputBox("Please enter week number")
Loop
If myWknum < 1 Or myWknum > 52 Then
Do While myWknum < 1 Or myWknum > 52
myWknum = InputBox("Please use a valid week number. (>= 1 or <= 52)")
Loop
End If
End Sub
如果周数无效,则应从第一个循环开始。否则,第二个“InputBox”没有“IsNumeric(myWknum)”。 – omegastripes
@omegastripes - 你是什么意思?只有当你传递一个数字时才会进入第二个循环。如果您输入像“Three”或“3dsju”,第一个循环会一直询问一个星期的数字,直到您严格给出一个数字。然后它检查这个数字,看看它是从1到52. – BruceWayne
@BruceWayne谢谢!完美工作。 – Christopher
什么意思 “没有工作”?请编辑问题并添加更多详细信息。 – omegastripes