【问题标题】:Code Execution Has Been Interrupted with Save Prevention Macro [duplicate]代码执行已被保存预防宏中断[重复]
【发布时间】:2015-11-06 18:21:13
【问题描述】:

我使用了与this answer 类似的方法来强制用户使用某个按钮进行保存。 我有以下内容:

公共变量

Dim MacroSave As Boolean

按钮事件

Sub RealSave_Click()
MacroSave = True
ThisWorkbook.Save
MacroSave = False
End Sub

保存捕手

Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If Not MacroSave Then
    Cancel = True 'Cancels any request to save the file
    MsgBox "Workbook not saved."
    Else
    Ret = MsgBox("Are you sure you want to save?", vbCritical Or vbYesNo, "Save File?")
        If Ret = vbNo Then Cancel = True
    End If
End Sub

悲伤

上面的代码在一段时间内完美运行,但现在它告诉我Code execution has been interruptedMacroSave = False。如果我在错误弹出窗口中点击Continue,则文件保存得很好。我看不到任何不正常工作的东西;就是这个讨厌的弹出窗口。

我试过了

  • 在MacroSave = False 之前添加DoEvents(以及之后 ThisWorkbook.Save),但代码在 DoEvents 上被中断。

  • 将该行移至“save catcher”,但同样的错误 为按钮事件提出了End Sub。

  • On Error Resume Next,这并不能消除这个问题。

我做错了什么,如何消除这种情况?

【问题讨论】:

  • 我想知道您是否有某种竞争条件,因为工作簿需要时间来保存,因此您在 Workbook_BeforeSave 完成之前移动到 RealSave_Click 的最后一行。如果您声明MacroSave = false 并在RealSave_Click 中消除MacroSave = false 会怎样?
  • @MattCremeens 我同意;情况确实如此。您的建议有几个问题:(1)我已经移动了MacroSave = False,但代码在RealSave_Click() 的End Sub 上被中断。 (2) 我必须在某个时候将MacroSave 重置为 False。 (3) 我相信在子函数或函数之外为MacroSave 赋值是无效的。
  • 既然你公开了,你可以在工作簿打开事件中声明它。
  • 我假设你有类似Option Explicit Dim MacroSave as Boolean的东西。
  • @MattCremeens 哦,好的;我道歉。不过,我希望能够在它打开时保存多次...

标签: vba excel


【解决方案1】:

这对我有用...

常规模块:

Option Explicit

Public MacroSave As Boolean

Sub RealSave_Click()

    If MsgBox("Are you sure you want to save?", vbExclamation + vbYesNo, _
             "Save File?") <> vbYes Then Exit Sub

    On Error GoTo haveError
    MacroSave = True
    ThisWorkbook.Save
    MsgBox "Saved!"

haveError:
    MacroSave = False

End Sub

ThisWorkbook 模块:

Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If Not MacroSave Then
        Cancel = True
        MsgBox "Workbook not saved: please use the 'Save changes'" & _
               " button to save this workbook"
    End If
End Sub

【讨论】:

    【解决方案2】:

    其他建议很棒,但是...归结为this:

    1. 在弹出窗口中按“调试”按钮。
    2. 按 Ctrl+Pause|Break 两次。
    3. 点击播放按钮继续。
    4. 完成后保存文件。

    【讨论】:

      猜你喜欢
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      相关资源
      最近更新 更多