打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VBA实战技巧07: 阻止用户按Ctrl Break键中断代码运行

excelperfect

当运行中的代码长时间没有响应,或者代码陷入死循环时,可以按Ctrl+Break键中断代码的执行(注:有些笔记本电脑的键盘上没有Break键,可以按Esc键)。此时,VBA会弹出如下图1所示的消息。

1

然而,有时候我们不希望用户按Ctrl+Break键中断正在运行中的代码,因为此时程序可能正在创建一些需要占用电脑资源才能生成的“东西”,所以才会看起来没有响应。如果我们中断代码的执行,那么可能已经生成的很多中间工作表、行和列仍然存在,并没有像程序预先设计的那样在退出前将其删除,这样会留下一个与我们之前完全不同的工作表,会让用户感到莫名其妙。

要阻止按Ctrl+Break键中断代码的执行,可以在程序中添加下面的语句:

Application.EnableCancelKey= xlErrorHandler

这个语句指示VBA不要显示“代码执行被中断”消息。实际上,这也为我们提供了一种利用用户按Ctrl+Break键操作的方法。

可以为Application.EnableCancelKey属性设置3个值:xlDisabledxlErrorHandlerxlInterrupt。如果将其设置为xlDisabled,则告诉VBA停止响应用户按下Ctrl+Break键的操作。如果将其设置为xlInterrupt,则正常响应用户按下Ctrl+Break键的操作。而xlErrorHandler则指示程序生成代码为18的错误,这样就可以使用错误处理来利用该错误。

下面是一个代码示例。循环执行5秒钟,如果在循环执行过程中,用户尝试中断代码,则会引发错误,从而执行错误处理语句。

Sub code_test()    Dim t    On Error GoTo MyErrorHandler    t = Timer    Application.EnableCancelKey =xlErrorHandler       Do While Timer - t < 5    Loop   MyErrorHandler:    If Err.Number = 18 Then        MsgBox '按Ctrl+Break键中止!!!'        Resume    Else        '其他代码    End IfEnd Sub

其实,在程序中可以有多个Application.EnableCancelKey语句。对于需要控制的部分,可以将其设置为xlErrorHandler,而对于其他部分,可以将其设置为xlInterrupt,来正常响应用户的操作。

Sub code_test() Dim t On Error GoTo MyErrorHandler t = Timer Application.EnableCancelKey =xlErrorHandler Do While Timer - t < 5 Loop Application.EnableCancelKey = xlInterrupt Do While Timer - t < 8 Loop MyErrorHandler: If Err.Number = 18 Then MsgBox '按Ctrl+Break键中止!!!' Resume Else '其他代码 End IfEnd Sub

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
vba如何去屏蔽一些功能?看完这些代码你应该会得到启发!
请注意:VBA代码一旦启动,你将无法退出,一切后果请自负
Excel 代码给用户使用,如何避免用户中断代码运行导致结果错误?
跟烟花入门VBA之87集:Application对象(五)
特定键或特定的组合键OnKey
电脑键盘上所有英文的意思,你懂吗?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服