2017-05-05 71 views
2

我寫了一個耗時的宏(它可以工作幾個小時);這就是爲什麼我想添加兩個東西到我的UserForm,手動停止宏。UserForm - 添加停止按鈕

第一個按鈕啓動宏。讓我們假設這個宏的代碼看起來像:

For i = 1 to 10000 
    DoEvents 
    If isCancelled Then Exit Sub 
Next i 

我在想增加一個額外的「停止」按鈕,從而改變isCancelledFalseTrue,但按鍵被鎖定,並在無法點擊宏執行。有沒有辦法啓用這個按鈕?或者也許有更好的方法來手動停止宏?

+1

是的,這是可能的 –

+0

謝謝:)你們都幫助了我很多這個問題! – Nakahed

回答

0

您需要在循環中使用DoEvents來捕獲用戶響應。

看到這個answer,這可能會幫助你。

+0

謝謝:)你們都幫助過我很多這個問題! – Nakahed

1

從概念上講,是的,這是可能的,可以用一個簡單的例子來說明。這實質上就是您提到的代碼類型。

假設您的用戶窗體有兩個按鈕,分別啓動(或恢復)和停止該過程。

Option Explicit 
Public isCancelled As Boolean 
Public iVal As Long 
Private Sub CommandButton1_Click() 
Dim i As Long 
If iVal = 0 Then iVal = 1 'Allows the user to resume if it's been "stopped" 
isCancelled = False 
For i = iVal To 100000 
    iVal = i 
    If i Mod 1000 = 1 Then 
     Debug.Print i 
    End If 
    If isCancelled Then 
     GoTo EarlyExit 
    Else 
     DoEvents 
    End If 

Next 
EarlyExit: 
End Sub 

Private Sub CommandButton2_Click() 
    isCancelled = True 
End Sub 

當然,實現這是我在這裏做了「繼續」選項是一個整潔的小把戲,但它可能取決於你的程序的複雜性日益複雜,它的依賴等,如果你的表格是顯示vbModeless你需要確保用戶以這樣的方式不會改變環境,介紹一個運行時錯誤等

您也可以看看優化你的程序運行時,如果是幾個小時

+0

謝謝:)你們都幫助過我很多這個問題!!! – Nakahed

+0

@Nakahed如果這解決了問題,請考慮將其標記爲「已接受」。 –