[VBA] 如何 利用 Excel 4.0 宏表 不启用宏则关闭活页簿

[VBA] 如何 利用 Excel 4.0 宏表 不启用宏则关闭活页簿


在Excel安全性中,若使用者不启用宏,可能会导致开发者的所设计的一些功能无法执行,故要求使用者启用宏。(若是使用增益集,就不需要"启用宏",改天再来写)

快照-200971132734_thumb[3]

设"中"会出现以下消息。

设"低"不会出现消息,直接启用宏。

快照-200971132932_thumb[2]

设"高"就直接停用宏。

以下就介绍如何达成此功能

1.利用Excel 4.0宏表来定义宏函数。在工作表工具栏按右键→插入→Excel 4.0 宏表

快照-200971133148_thumb[4]

快照-200971133223_thumb[1]

输入以下内容

=ERROR(FALSE)
=IF(ERROR.TYPE(RUN("TestMacro"))=4)
=ALERT("因停用了宏功能,文件将被关闭!",3)
=FILE.CLOSE(FALSE)
=END.IF()
=RETURN()

快照-20097113364_thumb[2]

2.在VBAProject新增一个Module,键入以下内容

Option Explicit
'为每个表定义隐藏名称
Sub AddPrivateNames()
Dim sht As Worksheet
'枚举
For Each sht In Worksheets
'为每一个工作表指定"宏表位置"
ThisWorkbook.Names.Add sht.Name & "!Auto_Activate", "=Macro1!$A$1", False
Next
End Sub

Sub HideMacroSheet()
'隐藏宏表
ThisWorkbook.Excel4MacroSheets(1).Visible = xlSheetHidden
End Sub

3.在Workbook的open事件调用HideMacroSheet、AddPrivateNames方法

Option Explicit
Private Sub Workbook_Open()
HideMacroSheet
AddPrivateNames
End Sub

快照-200972145147_thumb[1]

4.完成后就存档、关闭,然后再开一次刚刚保存的文件,记得至少要执行过一次宏让刚刚设定的程序生效,然后再存一次档。

快照-200971132932_thumb[3]

5.尔后使用者只要不启用宏,活页簿就会被关掉。

快照-200972151041_thumb[5]

6.此功能只有在Excel 2003测试成功

7.范例下载:若不启用宏则关闭活页簿.rar

若有谬误,烦请告知,新手发帖请多包涵

2010~2017 C# 第四季