《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实践经验,全部浓缩在下面的各个教程中: