VBA高级应用30例应用4:利用技术手段来阻止自动运行事件

《VBA高级应用30例》(版权10178985),是我推出的第十套教程,教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开,这套教程案例与理论结合,紧贴“实战”,并做“战术总结”,以便大家能很好的应用。教程的目的是要求大家在实际工作中分发VBA程序,写好的程序可以升级。本套教程共三册三十个专题,本讲的内容是:VBA高级应用30例应用4:利用技术手段来阻止自动运行事件

分享成果,随喜正能量】198 当你压力大到快要崩溃的时候,不要跟别人讲,也不要觉得自己委屈,没有人会心疼你。在夜深人静的时候,把心掏出来,自己缝缝补补,然后睡一觉醒来,又是信心百倍。。

应用4 工作簿打开时阻止事件的自动运行

作为开发人员,需要经常打开包含VBA的文件,并运行代码。但并不总是这样,有时我们还想阻止某些代码的运行,最为典型的是工作簿打开事件中的某些特殊命令,如身份验证部分,我们在某些时候是希望阻止工作簿打开时自动运行的。这篇应用就是向大家展示如何实现这一点。为什么要这么做呢?通常,如果在自己的文件中使用了工作簿自动打开事件,而文件仍在开发中,自动运行Open事件可能需要一段时间才能运行代码,或者在开发文件的程序书写过程中,我们不希望在此时配置项目。

在实际应用中,我们要求用户在打开文件事件中处理某些任务时,一定要启动宏。如果没有设置启用宏,这些事件处理程序会保持禁用状态,这是我们不希望看到的。在这篇应用中,我会同时给大家展示如果用户禁用宏,将不能顺利处理工作簿的方法。但要注意,不信任的宏文件要小心处理。

4 利用技术手段来阻止自动运行事件

在上述代码中,我们利用键盘设置的手段来阻止自动运行事件,这部分我们利用一个技术手段实现同样的目的。这个技术手段类似于上述的键盘设置,只是利用了“判断文件是否存在”来控制。

我们看下面的代码:

Private Sub Workbook_Open()

UU = Dir(ThisWorkbook.Path & "/mynzSomeMode.txt")

If Len(UU) <> 0 Then GoTo 100

Dim sh As Worksheet

Dim sheet As Worksheet

Set sheet = ActiveWorkbook.Sheets.Add(After:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count))

sheet.Select

UU = InputBox("请输入您的权限密码", "文件打开确认")

If UU <> "1234" Then

ThisWorkbook.Close (False)

Else

Application.DisplayAlerts = False

sheet.Delete

Application.DisplayAlerts = True

End If

100:

End Sub

代码的截图:

代码的讲解:

上述代码同上一部分的代码比较不同的仍然只是一句代码,这句是:If Len(Dir (ThisWorkbook.Path & "/mynzSomeMode.txt")) <> 0 Then GoTo 100 这句代码的意义是如果存在文件mynzSomeMode.txt,那么代码就转跳到行号标签为100的代码之后。在实际代码中正好是跳过了身份验证的部分。从而实现了阻止这一自动运行事件的发生。

我们测试一下代码的运行,如下面的“高级应用04_3.xlsm”,我们按下回车键。

这个时候会提示要求用户输入身份验证:

我们在同一文件夹下建立一个txt文件:

此时我们再次打开刚才的“高级应用04_3.xlsm”文件,这样就会直接打开文件了:

  • 以上部分用到的程序文件:高级应用04_3.XLSM
  • 以上部分用到的txt文件:mynzSomeMode.txt

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值