excel VBA - 通过按<esc>停止正在运行的脚本 - 没有错误消息</esc>

时间:2015-04-21 14:21:16

标签: excel-vba error-handling vba excel

我在Excel中有一个脚本,有时可能会运行太长时间。 我需要一个简单的方法让用户中断。

现在解决方案是按[esc]键而不是[end]按钮。

我想知道是否有可能摆脱这个弹出窗口

类似于:如果按下[esc]而不是简单的End(停止所有脚本)就可以了。

编辑3:最后我发现了问题所在。在do while之后有一个for循环,所以for并没有停止。为了解决这个问题,我在for循环中插入了一个简单的if-end函数。

我也接受mrbungle的解决方案,因为在他的链接中我找到了一个解决方案,通过按[esc]来停止脚本而没有错误消息。谢谢你的回答。

工作代码。

Option Explicit
Dim StopCode As Boolean 'Global bool

Sub mysub_Click()
Dim c As Range
Dim p As String
Dim lastonline As Object
Dim x: Dim y
Dim actives As String
Dim timeoutc As Variant
actives = ActiveSheet.Name

timeoutc = 0

StopCode = False

Application.EnableCancelKey = xlErrorHandler
On Error GoTo ErrH:
DoEvents
For Each c In Sheets(actives).UsedRange.Cells
    If StopCode = True Then
        Exit For
    End If

{The code} 'I have deleted it so it is less confusing now       

next c


ErrH:
     If Err.Number = 18 Then
         Debug.Print "break key hit"
     Else
         Debug.Print "other error: "; Err.Number, Err.Description
     End If
End Sub

用户形式

Option Explicit
Dim StopCode As Boolean 'Global bool

Private Sub CommandButton1_Click() 'close button
PTimeout.Hide 
End Sub

Private Sub CommandButton2_Click() 'stop script button (does not work)

StopCode = True
PTimeout.Hide

End Sub

1 个答案:

答案 0 :(得分:2)

Chip Pearson有一个很好的解决方案here我认为可以解决你的问题。如果有问题,我会简单解释一下。这将在您的代码和相关工作表中,您将创建一个命令按钮并分配另一个将StopCode设置为True的子。当用户单击该按钮时,StopCode将设置为True,代码将停止运行。

StopCode = False
Do Until StopCode = True
    DoEvents
    ' your code here. next line is just an example