UserForm - 添加停止按钮

时间:2017-05-05 17:03:33

标签: vba excel-vba excel

我写了一个耗时的宏(它可以工作几个小时);这就是为什么我要向我的UserForm添加两个内容,以手动停止宏。

第一个按钮启动宏。让我们假设这个宏的代码如下:

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

我正考虑添加额外的"停止"按钮,将isCancelledFalse更改为True,但按钮已锁定,无法在宏执行期间单击。有没有办法启用此按钮?或者可能有更好的方法来手动停止宏?

2 个答案:

答案 0 :(得分:2)

从概念上讲,这是可能的,可以通过一个简单的例子来说明。这基本上是您提到的代码类型。

假设您的UserForm有两个按钮,分别启动(或恢复)并停止该过程。

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,您可以需要确保用户不会以引入运行时错误等方式改变环境。

如果运行时间为小时,您也可以优化您的程序。

答案 1 :(得分:0)

你需要在循环中使用DoEvents来捕获用户的响应。

请参阅此answer,这对您也有帮助。