2017-07-18 78 views
0

宏执行后,我的宏需要输入。但是,如果用户按下取消,则宏将在没有此信息的情况下执行,这会在数据中留下漏洞。这是我最好的猜测,但它并不阻止用户取消并仍然执行:如何在执行宏之前需要输入到我的InputBox?

 Do Until Not IsEmpty(myWknum) 
     DoEvents 

      myWknum = InputBox("Please enter week number") 

     Loop 
+0

什么意思 “没有工作”?请编辑问题并添加更多详细信息。 – omegastripes

回答

1

如果当用户取消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 
+0

不错的检查'Int()'太:D – BruceWayne

+1

@BruceWayne我必须一次性测试! :D(而且我生活在现实世界中,有时也需要一个星期53)) – YowE3K

0

Loop行之前加上此行。

if myWknum="" then Exit Do

+0

完全相反 – omegastripes

+0

哦,你试图阻止他们使用取消?这对用户来说会非常恼人。 – braX

2

这将迫使一个值,该值必须是一个数字:

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 
+0

如果周数无效,则应从第一个循环开始。否则,第二个“InputBox”没有“IsNumeric(myWknum)”。 – omegastripes

+0

@omegastripes - 你是什么意思?只有当你传递一个数字时才会进入第二个循环。如果您输入像“Three”或“3dsju”,第一个循环会一直询问一个星期的数字,直到您严格给出一个数字。然后它检查这个数字,看看它是从1到52. – BruceWayne

+0

@BruceWayne谢谢!完美工作。 – Christopher

相关问题