【问题标题】:Cannot trap after "Want to save your changes" dialog in Excel在 Excel 中的“想要保存更改”对话框后无法捕获
【发布时间】:2015-01-19 08:16:54
【问题描述】:
  1. 在 Word VSTO 中,我们有 DocumentBeforeSave 事件,该事件在“想要保存更改”对话框之后立即调用,我可以轻松取消标准保存对话框并显示我自己的。

  2. 但在 Excel VSTO 中,WorkbookBeforeSave 在“保存”对话框关闭后被调用,这会导致我自己的保存对话框在内置对话框之后显示。我可以使用 WorkbookBeforeClose 事件,但我应该显示我自己的“想要保存您的更改”对话框,并且当按下“不保存”时,自动保存功能也将不起作用。

有没有办法在 Excel 中的“想要保存更改”对话框之后立即调用我的代码,并能够阻止内置的“保存”对话框或以某种方式告诉 Excel 创建一个自动保存点(使用我自己的“想要保存你的更改”对话框)当我按“不保存”时?

【问题讨论】:

  • @vba4all 是的,我确定。尝试单击关闭新文档。从 ctrl + s 和 File-> Save all ok 保存
  • 您是否将 SaveAsUI 设置为 False 并将 Cancel 设置为 True

标签: c# excel vsto office-interop


【解决方案1】:

我不确定你是否找到了答案,因为这个帖子有点过时了,但我想我会投入 0.02 美元。

我在解锁的非常隐藏的工作表和每个可见的 Worksheet 上创建一个 [isDirty] 命名范围。更改我设置 [isDirty]=True

在 Workbook.BeforeClose 我有这个:

      If [IsDirty] = True Then
            Select Case MsgBox("Do you want to save the changes you made to '" & .Name & "'?", _
                vbYesNoCancel + vbExclamation)
                Case Is = vbYes
                    ThisWorkbook.Save
                    [IsDirty] = False
                Case Is = vbNo
                     'Do not save
                Case Is = vbCancel
                    Cancel = True
            End Select
     End If

In Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    ThisWorkbook.Save
    [IsDirty] = False
    Cancel=True

【讨论】:

    猜你喜欢
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 2012-01-28
    相关资源
    最近更新 更多