Vba 代码执行已被保存宏中断

Vba 代码执行已被保存宏中断,vba,excel,Vba,Excel,我使用了类似的方法来强制用户使用某个按钮进行保存。 我有以下资料: 公共变量 按钮事件 拯救捕手 悲伤 上面的代码在一段时间内运行良好,但现在它告诉我代码执行在MacroSave=False处被中断。如果我在错误弹出窗口中点击Continue,则文件保存良好。我看不出任何东西工作不正常;只是这个讨厌的弹出窗口 我试过了 在MacroSave=False之前和之后添加DoEvents thiswook.Save),但代码在DoEvents上被中断 将该行移到“save catcher”,但出现相

我使用了类似的方法来强制用户使用某个按钮进行保存。 我有以下资料:

公共变量 按钮事件 拯救捕手 悲伤 上面的代码在一段时间内运行良好,但现在它告诉我
代码执行在
MacroSave=False
处被中断。如果我在错误弹出窗口中点击
Continue
,则文件保存良好。我看不出任何东西工作不正常;只是这个讨厌的弹出窗口

我试过了
  • MacroSave=False
    之前和之后添加
    DoEvents
    thiswook.Save
    ),但代码在
    DoEvents
    上被中断

  • 将该行移到“save catcher”,但出现相同的错误 在按钮事件的
    结束子菜单中出现

  • 出错时继续下一步
    ,但这并不能消除此问题

我做错了什么?我怎样才能消除这个问题?这对我来说很有效

常规模块:

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
这对我有用

常规模块:

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

其他的建议很好,但是……归结起来:

  • 按弹出窗口中的“调试”按钮
  • 按Ctrl+Pause | Break键两次
  • 点击播放按钮继续
  • 完成后保存文件

  • 其他的建议很好,但是……归结起来:

  • 按弹出窗口中的“调试”按钮
  • 按Ctrl+Pause | Break键两次
  • 点击播放按钮继续
  • 完成后保存文件

  • 我想知道您是否有某种竞争条件,因为工作簿需要时间保存,因此您在保存前点击
    工作簿的最后一行,然后移动到
    RealSave\u
    。如果您在标注位置声明
    MacroSave=false
    ,并在
    RealSave\u单击
    中消除
    MacroSave=false
    ,我同意;看起来确实如此。你的建议有几个问题:(1)我已经在
    MacroSave=False
    中移动了,但是代码在
    RealSave\u Click()
    结束子部分被中断。(2) 我必须在某个时候将
    MacroSave
    重置为False。(3) 我相信在子函数或函数之外为
    MacroSave
    赋值是无效的。既然你公开了它,你可以在工作簿打开事件中声明它。我假设你有类似
    选项的东西,比如显式Dim MacroSave as Boolean
    @MattCremeens哦,好;我道歉。我希望能够在它打开时保存多次,但是…我想知道您是否有某种竞争条件,因为工作簿需要时间保存,因此您在保存前单击
    工作簿的最后一行。如果您在标注位置声明
    MacroSave=false
    ,并在
    RealSave\u单击
    中消除
    MacroSave=false
    ,我同意;看起来确实如此。你的建议有几个问题:(1)我已经在
    MacroSave=False
    中移动了,但是代码在
    RealSave\u Click()
    结束子部分被中断。(2) 我必须在某个时候将
    MacroSave
    重置为False。(3) 我相信在子函数或函数之外为
    MacroSave
    赋值是无效的。既然你公开了它,你可以在工作簿打开事件中声明它。我假设你有类似
    选项的东西,比如显式Dim MacroSave as Boolean
    @MattCremeens哦,好;我道歉。我希望能够在它打开时潜在地保存多次,但是。。。
    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
    
    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
    
    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