【问题标题】:Detect if Save event is triggered manually or by autosave检测保存事件是手动触发还是通过自动保存触发
【发布时间】:2021-09-17 18:05:06
【问题描述】:

我正在使用一小段代码在保存工作簿之前导出 VBProject 组件。

Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If Wb.HasVBProject Then
        If Wb.VBProject.Protection = vbext_pp_none Then
            If vbYes = MsgBox("Do you want to export the VBProject components?", vbYesNo) Then
                ExportWB Wb ' call a function to export the data
            End If
        End If
    End If
End Sub

此代码运行良好,但如果自动保存在用户(我)上,每隔几秒就会询问它是否要导出项目。

我可以使用Wb.AutoSave 检查自动保存是打开还是关闭,但是有没有办法检查事件是手动触发还是通过自动保存触发的,以便仅在有人需要保存时运行代码,而不是自动保存事件?

文森特

【问题讨论】:

  • @SiddharthRout 该链接似乎并不直接相关。唯一的答案是“Excel 2003/2007 中没有自动保存”。我不知道版本历史,但这里的问题似乎涉及 10 年前不存在的东西。
  • Microsoft 文章How AutoSave Impacts add-ins and macros 听起来不太令人鼓舞。它概述了许多潜在问题并讨论了各种解决方法。在任何情况下,它都没有建议检查保存事件是否是自动触发的,即使在某些情况下可能会有所帮助。
  • @JohnColeman 我试图说明的一点是,自动恢复保存不是真正的工作簿保存。你不能从WorkbookBeforeSave 捕获它。您必须按照该链接中的建议进行操作。关闭工作簿的自动保存,然后滚动您自己的自动保存。
  • @SiddharthRout 但是似乎 OP 根本不是在谈论 AutoRecovery,而是在谈论一个 AutoSave,它 isWorkbookBeforeSave 困住了,问题在于当 OP 不希望它被困住时,它就被困住了。

标签: excel vba


【解决方案1】:
  1. 使用ThisWorkbook.AutoSaveOn = False,效果应该没有了。您可以放置​​此行,例如进入 ThisWorkbook 的活动Private Sub Workbook_Open
  2. 您可以从ThisWorkbook.AutoSaveOn 获取有关当前是否为此文件启用自动保存的信息(返回 True 表示启用,或 False 表示禁用)。

【讨论】: