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

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用法)] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

First 4 Figures《王国之泪》林克,准备战斗!

First 4 Figures发布了一款《塞尔达传说:王国之泪》林克手办,全高21cm。 林克准备战斗,左手握着劳鲁王之右臂,身后背着大师之剑,腰间配有装满箭矢的箭袋。底座的设计灵感来自左纳乌神殿的封印图案…

First 4 Figures《<strong>王国之泪</strong>》林克,准备战斗!

迪阿股份获得实用新型专利授权:“可翻转的柔性首饰”(迪阿股份 ipo)

证券之星消息,根据『天眼查APP』数据显示迪阿股份(301177)新获得一项实用新型专利授权,专利名为“可翻转的柔性首饰”,专利申请号为CN202422825949.7,授权日为2025年10月17日。 专利摘要…

迪阿股份获得实用新型专利授权:“可翻转的柔性首饰”(迪阿股份 ipo)

虹口宝易埠珠宝全能!熊猫金币,黄金回收,奥运金条,专业团队精准估价

每一根奥运金条都有着独特的纪念意义,其设计融合了奥运元素和中国传统文化,是体育与艺术的完美结合。 上海宝易埠珠宝以其专业团队的精准估价和全方位服务,在珠宝行业树立了卓越的口碑。无论是熊猫金币的收藏投资、黄金回…

虹口宝易埠珠宝全能!熊猫金币,黄金回收,奥运金条,专业团队精准估价

70岁潘虹健康引担忧,眼神痴呆走路直晃悠,当众骂演员不留面子!(潘虹今63岁单身一人)

更让人揪心的是,她的思维似乎时常走神——当她挥手打招呼时,手举到一半停住了,突然摸了摸下巴,眼神飘忽,过了好几秒才回过神来,慢慢地继续挥手,那一刻仿佛是身边年纪大的长辈在做的动作。 在剧组去雁荡居民区与观众互…

70岁潘虹健康引担忧,眼神痴呆走路直晃悠,当众骂演员不留面子!(潘虹今63岁单身一人)

洛丽塔暗黑哥特风:重塑节日造型的神秘美学(洛丽塔暗黑哥特风白色)

洛丽塔少女的节日新宠:万圣节与圣诞节的交集,暗黑哥特风洛丽塔两件套正成为独特时尚选择。它是如何结合节日元💴素、又为何成为潮流焦点?本文深入探讨洛丽塔暗黑哥特风套装的起源、设计特点及其背后的文化意义。

洛丽塔暗黑哥特风:重塑节日造型的神秘美学(洛丽塔暗黑哥特风白色)