[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

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo