分享

请注意:VBA代码一旦启动,你将无法退出,一切后果请自负

 恒信通讯43a2p6 2019-03-25

大家好,我们今日继续讲解VBA代码解决方案的第90讲内容:代码一旦启动将无法退出,防止用户中断代码运行。在之前的几篇文章中,我讲了代码优化的几点建议,其实代码优化是很值得商榷的问题,这里的优化主要是速度的优化,其实代码的运行是一个系统的工程,不仅仅是速度,还有视觉的效果,人机的交流是否通畅等等,我的几篇文章就是抛砖引玉吧。

今日我要讲的是代码的技巧了,在使用VBA开发的程序交予用户使用后,如果在运行需要长时间执行的宏代码时,用户在代码运行期间按下了<Esc>键或者<Ctrl+Break>组合键,代码会中断运行;如下图:

请注意:VBA代码一旦启动,你将无法退出,一切后果请自负

此时单击'继续'按钮将继续执行代码,单击'结束'按钮结束过程,单击'调试'按钮进入中断模式,这显然有时候不是用户所希望出现的,能否可以对上述的键值进行屏蔽呢?答案当然是肯定的。此时需要使用Application对象的EnableCancelKey属性来进行控制,应用于Application对象的EnableCancelKey属性控制将用户中断用于运行程序的处理,语法如下:

expression.EnableCancelKey

参数是expression必须的,是Application对象。

EnableCancelKey属性值为下面常量之一。

① xlDisabled 0 完全禁用'取消'键捕获功能

② xlErrorHandler 2 将中断作为错误信号传递给运行程序,由 On Error GoTo 语句设置的错误处理程序捕获。可捕获的错误代码为 18

③ xlInterrupt 1 中断当前运行程序,用户可进行调试或结束程序的运行

如果我们将上述的EnableCancelKey属性值设置为xlDisabled或者0,那么就不能退出代码的运行了。看下面的代码实测:

Sub MyNzEnablEsc()

Dim i As Integer

Application.EnableCancelKey = xlDisabled

For i = 1 To 3000

Sheets('Sheet11').Cells(i, 1).Select

Sheets('Sheet11').Cells(i, 1) = i

Next

Application.EnableCancelKey = xlInterrupt

Sheets('Sheet11').Cells(1, 1).Select

End Sub

代码解析:

MyNzEnablEsc过程在代码运行期间禁用'取消'键的捕获功能。

只要Microsoft Excel返回空闲状态并且没有程序处于运行状态,EnableCancelKey属性都会重置为xlInterrupt。若要在程序运行中捕获或者禁用取消过程,则每次在程序被调用时必须明确更改EnableCancelKey属性。

代码截图:

请注意:VBA代码一旦启动,你将无法退出,一切后果请自负

运行之中是不允许退出的。如下图,呵呵这个截图没有什么意义了。

请注意:VBA代码一旦启动,你将无法退出,一切后果请自负

今日内容回向:

1 如何能使代码不能中断运行?

2 Application.EnableCancelKey 的意义是什么?

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多