相当多的问题是以下 - 为什么在即时窗口中我得到了这个:
Application.EnableCancelKey = 2
?Application.EnableCancelKey
1
最后一行应该是2还是我错过了什么? 谢谢!
答案 0 :(得分:1)
修改强>
基础是枚举xlErrorHandler
声明“中断作为错误被发送到正在运行的过程,可以通过使用On Error GoTo语句设置的错误处理程序来捕获。”,您需要一个错误处理程序使用该枚举(xlErrorHandler
或2
)。
Since some statements are not possible within the immediate window,On Error GoTo
是这些语句之一,您不能在即时窗口中拥有错误处理程序,从而将EnableCancelKey
的值更改为2
。因此Excel会自动将其切换为1
,当您要求它显示值时,会为您提供值1
。
唯一的解决方案是使用子。
原始回复:
好的,我使用了documentation provided on the MSDN中的代码并编辑了一些内容,使用以下代码对其进行测试。
为了解释一下,我只需按一次“ESC”按钮就停止执行,从而阻止文本框退出。您可以在立即窗口中观看最后一个EnableCancelKey的值正常变化。
Sub Test1()
Debug.Print " Before execution result : " & Application.EnableCancelKey
On Error GoTo handleCancel
Application.EnableCancelKey = 2 'xlErrorHandler
Debug.Print " Regular execution result : " & Application.EnableCancelKey
For x = 1 To 10000 ' Do something 1,000,000 times (long!)
Debug.Print "Test"
Next x
handleCancel:
If Err = 18 Then
Debug.Print "Aborted macro result : " & Application.EnableCancelKey
MsgBox "You cancelled"
End If
End Sub
希望这会有所帮助,我得到了预期的结果。
你必须写一个Error Handler来获得2值,否则代码无法捕获错误,这就是你每次执行宏时得到1的原因。
由于枚举xlErrorHandler
的描述声明“中断作为错误发送到正在运行的过程,可以通过使用On Error GoTo语句设置的错误处理程序来捕获。”,您需要一个错误处理程序使用那个枚举。
有了它,它应该有效:
Sub test2()
On Error GoTo theEnd
Application.EnableCancelKey = 2
Debug.Print Application.EnableCancelKey
theEnd:
End Sub