使用后保存子例程进行无穷循环

问题描述 投票:1回答:2

我正在尝试使用非常隐秘的方式来强制用户启用宏来维护工作簿的安全性。

这很有效,除了用户抱怨缺少对话框以询问是否要保存或不关闭时。

我以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
excel vba infinite-loop after-save
2个回答
1
投票

为了避免无限的触发循环:


0
投票

略有不同的策略:

© www.soinside.com 2019 - 2024. All rights reserved.