VBA高级应用30例应用4:打开工作簿时自动运行事件的代码修正(vba用法)

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

分享成果,随喜正能量】228内心的美,如空谷幽兰,洋溢阵阵芬芳,使人心情愉悦。学道的人,须重视内在的修持,不以华丽的衣着来装饰自己,而以高贵气质来涵育自己,以道德修养来庄严自己。

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

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

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

5 打开工作簿时自动运行事件的代码修正

在以上第2,3,4部分我们讲解了阻止工作簿打开时自动运行事件的三种方案,这三种方案在实际应用时是非常方便的,但是,很多读者会说:老师,最方便的方案可以屏蔽宏代码运行。是的,如果我们在工作簿选项中选择禁用宏,就可以屏蔽掉所有的代码运行,设置如下:

但是,以上的设置却不是我们期望的,我们期望就是用户在打开工作薄时录入身份验证密码,那么如何实现用户打开工作薄就必须启用宏,否则文件不能顺利操作呢?为此我们要修正一下上面给出的各个文件。

1)文件“高级应用04_1.XLSM”的代码修正:

我先给出下面的代码修正:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

On Error GoTo Err_Handle

Dim sh As Worksheet

Set sh = Sheets("BLANK")

GoTo 100

Err_Handle:

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

sh.Name = "BLANK"

100:

Err.Clear

Sheets("BLANK").Visible = True

For Each sh In ThisWorkbook.Sheets

If sh.Name <> "BLANK" Then

sh.Visible = xlSheetVeryHidden

End If

Next

ActiveWorkbook.Save

End Sub

Private Sub Workbook_Open()

Dim sh As Worksheet

For Each sh In ThisWorkbook.Sheets

If sh.Name <> "BLANK" Then

sh.Visible = xlSheetVisible

End If

Next

Sheets("BLANK").Visible = xlSheetVeryHidden

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

End Sub

代码的截图:

代码的讲解:上述代码利用了我的第一套教程《VBA代码解决方案》中的部分代码,并完善了一下功能,下面进行讲解。

1)Private Sub Workbook_BeforeClose(Cancel As Boolean)

表示事件是在工作簿关闭之前发生。

2)On Error GoTo Err_Handle

Dim sh As Worksheet

Set sh = Sheets("BLANK")

GoTo 100

Err_Handle:

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

sh.Name = "BLANK"

以上代码首先是一句错误处理程序,如果发生错误,代码将转到Err_Handle:处继续运行;然后赋值一个对象变量Set sh = Sheets("BLANK"),这是将工作表Sheets("BLANK")赋值给变量sh,如果没有这个工作表,将发生错误,代码会转到Err_Handle:处继续运行,如果没有发生错误就转到标签为100的代码处运行;此时没有Sheets("BLANK")工作表,会创建一个。

2)100:Err.Clear

Sheets("BLANK").Visible = True

以上代码会让Sheets("BLANK")工作表可见。

3)For Each sh In ThisWorkbook.Sheets

If sh.Name <> "BLANK" Then

sh.Visible = xlSheetVeryHidden

End If

Next

以上代码在所有工作表集合间建立一个遍历循环,如果不为Sheets("BLANK")工作表,就令这个工作表的可见属性修正为xlSheetVeryHidden,如下列表:

名称

说明

xlSheetHidden

0

隐藏工作表,用户可以通过菜单取消隐藏。

xlSheetVeryHidden

2

隐藏对象,使对象重新可见的唯一方法是将此属性设置为 True(用户无法使该对象可见)。

xlSheetVisible

-1

显示工作表。

我们看一下xlSheetVeryHidden这个属性:隐藏对象,使对象重新可见的唯一方法是将此属性设置为 True(用户无法使该对象可见),所以达到了深度隐藏。

4)For Each sh In ThisWorkbook.Sheets

If sh.Name <> "BLANK" Then

sh.Visible = xlSheetVisible

End If

Next

Sheets("BLANK").Visible = xlSheetVeryHidden

以上代码是工作薄打开事件中发生,也是在工作表集合中发生的遍历循环,是将Sheets ("BLANK")深度隐藏,其他工作表可见。

以上的操作令工作薄在关闭时有用的工作表深度隐藏,只留一个"BLANK"空白的工作表,打开工作薄时会让"BLANK"工作表深度隐藏,而有用的工作表会可见。如果用户没有启用宏,那么用户只能会看到一个"BLANK"空白的工作表。如下图:

而用户启用了宏之后,会正常运行,首先提示用户输入权限密码:

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

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

特别声明:[VBA高级应用30例应用4:打开工作簿时自动运行事件的代码修正(vba用法)] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

张继科说樊振东的球拍要回收 揭秘器材闭环管理(张继科樊振东交手战绩)

张继科在直播中展示樊振东签名球拍时提到,比赛结束后球拍需要返回蝴蝶厂。这句话意外地揭示了职业乒乓球选手器材管理的内幕,引发了公众对顶尖运动员装备闭环管理机制的关注。这一规则的核心在于球拍的所有权归属

张继科说樊振东的球拍要回收 揭秘器材闭环管理(张继科樊振东交手战绩)

央视《四喜》近尾声,最令人讨厌角色出炉,果然真正的坏都是惯的(四喜电视剧演员)

有些角色坏得让人忍不住想冲进屏幕里说两句,但仔细琢磨一下,他们的坏好像也不是天生的,很多都是被身边人给“养”出来的。儿子儿媳生活压力那么大,她不出钱也不出力,一听说怀了二胎,就只知道催生。 她把儿媳的价值…

央视《<strong>四喜</strong>》近尾声,最令人讨厌角色出炉,果然真正的坏都是惯的(四喜电视剧演员)

『任嘉伦』两部剧接连翻车!吐槽声中才明白,于正所言非虚(『任嘉伦』合作新剧)

于正曾一度建议他:“挑选角色时要考虑自己的强项,避免挑战自己不擅长的角色”,可见于正在某种程度上并不认为『任嘉伦』在演技上具备多元化的能力。 结语:演技与角色的选择,『任嘉伦』的未来回顾《春日宴》和《梦华录》这两部剧…

『任嘉伦』两部剧接连翻车!吐槽声中才明白,于正所言非虚(『任嘉伦』合作新剧)

JM 最新 2.0.12 版上线!闪退问题彻底解决,资源库全新升级,速上车免失效!(jm整合下载)

JM 已紧急更新至 2.0.12 版本,不仅彻底修复了闪退、卡顿等常见 bug,让使用体验更流畅,还同步完成了资源库全面焕新 —— 新增海量热门影视、综艺、漫画资源,覆盖多类型需求,满足大家一站式获取优质内容…

JM 最新 2.0.12 版上线!闪退问题彻底解决,资源库全新升级,速上车免失效!(jm整合下载)

成人片单《年轻的小姨子4》:一间屋檐下,见证彼此的蜕变

姐姐家的生活像一台运转有序却略显紧绷的机器:姐夫金成俊经营着一家小型汽修店,每天早出晚归只为支撑家庭开支;姐姐作为全职主妇,将家里打理得井井有条,却也常被孩子的哭闹和琐碎的家务压得喘不过气;刚上小学的侄子敏浩…

成人片单《<strong>年轻的小姨子4</strong>》:一间屋檐下,见证彼此的蜕变