Application.EnableCancelKey不起作用

Application.EnableCancelKey的设置不再适用于我在Excel 2010中,也不在2013年。每当您尝试设置EnableCancelKey它总是返回1这是一个简单的标准示例代码片段任何人都有同样的问题? 任何想法如何规避?

Sub trial() Dim i As Long Dim result As Variant i = Application.EnableCancelKey Application.EnableCancelKey = XlEnableCancelKey.xlErrorHandler i = Application.EnableCancelKey On Error GoTo trap_error For i = 1 To 1000000 Sheets("sheet1").Cells(1, 1) = i ' give it something to do Next i Exit Sub trap_error: If Err = 18 Then result = MsgBox("ok got it, am at " & i, vbYesNo) If result = vbYes Then Resume Next End If End If i = i End Sub 

请注意,上面的代码是在一个空白的工作簿,没有任何东西,但代码。 它只是不听esc或ctrl + break。

这实际上是预期的行为,因为当Excel空闲或代码未运行时,EnableCancelKey总是xlInterrupt(1)。 当你处于Break模式时,你的代码根本没有运行,没有任何东西可以取消,Excel必须准备parsing你的下一个input。

“无论何时Microsoft Excel返回到空闲状态并且没有代码正在运行,EnableCancelKey属性总是重置为xlInterrupt。要在您的过程中捕获或禁用取消,每次调用该过程时都必须显式更改EnableCancelKey属性。 ( https://msdn.microsoft.com/en-us/library/office/ff834623.aspx

编辑添加:没有什么在这个沼泽标准的代码实际上显示EnableCancelKey的值。 这是一个适当的testing。 运行时按Esc键。 使用xlDisabled,它只是继续运行,用xlErrorHandler它打破了循环(继续下一步),并与xlInterrupt它进入debugging。

 Sub test() Dim i On Error GoTo ErrHndl Application.EnableCancelKey = xlDisabled For i = 1 To 50000 Sheets("sheet1").Cells(1, 1) = Application.EnableCancelKey Next Debug.Print Application.EnableCancelKey, i Application.EnableCancelKey = xlErrorHandler For i = 1 To 50000 Sheets("sheet1").Cells(1, 1) = Application.EnableCancelKey Next Debug.Print Application.EnableCancelKey, i Application.EnableCancelKey = xlInterrupt For i = 1 To 50000 Sheets("sheet1").Cells(1, 1) = Application.EnableCancelKey Next Debug.Print Application.EnableCancelKey, i Exit Sub ErrHndl: Debug.Print "Hello Erro" Resume Next End Sub 

testing输出(我没有中断第三个周期):

  0 50001 Hello Erro 2 6373 1 50001