宏執行後,我的宏需要輸入。但是,如果用戶按下取消,則宏將在沒有此信息的情況下執行,這會在數據中留下漏洞。這是我最好的猜測,但它並不阻止用戶取消並仍然執行:如何在執行宏之前需要輸入到我的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