代码执行已被保存预防宏中断[重复]
Posted
技术标签:
【中文标题】代码执行已被保存预防宏中断[重复]【英文标题】: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 interrupted
MacroSave = 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 哦,好的;我道歉。不过,我希望能够在它打开时保存多次...
【参考方案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:
-
在弹出窗口中按“调试”按钮。
按 Ctrl+Pause|Break 两次。
点击播放按钮继续。
完成后保存文件。
【讨论】:
以上是关于代码执行已被保存预防宏中断[重复]的主要内容,如果未能解决你的问题,请参考以下文章