我正在尝试使用非常隐秘的方式来强制用户启用宏来维护工作簿的安全性。
这很有效,除了用户抱怨缺少对话框以询问是否要保存或不关闭时。
我以msgbox的形式添加了保存/不保存功能,但是这打开了一个违反安全性的特殊情况:
即,如果用户打开文件,启用宏,越过启动屏幕,使用保存功能保存工作簿,然后关闭而不保存,则下次打开工作簿时,不会强制用户启用宏。
我试图通过保存以下代码来解决此问题(在保存时我没有运气(因为在代码运行后它又保存了,这违反了代码的要点),我没有运气),但这代码似乎会产生由保存触发的无限循环。我尝试在开始时进行检查以检查状态是否已保存,但是由于宏在保存后运行,因此对于宏而言始终是真实状态。
类似地,我尝试在底部添加检查以查看其是否已保存,如果确实已保存,然后退出子例程,但是代码永远不会走得太远,因为在保存时会再次触发。
有人有什么想法吗? (下面的代码)
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
If Success = True Then
'Step 1: Define WS variable
Dim ws As Worksheet
'Step 2: Unhide the Starting Sheet
Sheets("START").Visible = xlSheetVisible
'Step 3: Start looping through all worksheets
For Each ws In ThisWorkbook.Worksheets
'Step 4: Check each worksheet name
If ws.Name <> "Start" Then
'Step 5: Hide the sheet
ws.Visible = xlVeryHidden
End If
'Step 6: Loop to next worksheet
Next ws
'Step 7: Save the workbook
ActiveWorkbook.Save
'Step 8: Start looping through all worksheets
For Each ws In ThisWorkbook.Worksheets
'Step 9: Re-Unhide All Worksheets
ws.Visible = xlSheetVisible
'Step 10: Loop to next worksheet
Next ws
'Step 11: Re-Hide the Start Sheet
Sheets("START").Visible = xlVeryHidden
'Step 12: Exit loop
If ThisWorkbook.Saved = True Then
Exit Sub
End If
End If
End Sub
为了避免无限的触发循环:
略有不同的策略: