2017-07-18 67 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

相關問題