excel - MsgBox 使用 If answer = Yes/No/Cancel 出现两次

标签 excel vba msgbox

我正在尝试创建一个宏,它会在关闭 Excel 之前给我一个消息框,询问我是否要保存更改。当我从消息框中选择否时,消息再次弹出,然后我第二次选择否,它确实关闭了。

我对VBA编程不太了解,我只是尝试录制宏然后稍微编辑它们。我也在网上搜索并复制粘贴。这就是我将这段代码放在下面的方式,但显然有问题。 (虽然它有效)
我想知道是否有人可以建议我在此代码中需要更改什么。
任何帮助表示赞赏,
谢谢

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Dim answer As String
    Dim question As String
    Dim OrigName As String


    question = "Do you want to save Changes?"
    answer = MsgBox(question, vbYesNoCancel)

    If answer = vbCancel Then
        Exit Sub
    End If

    If answer = vbNo Then
        ActiveWorkbook.Close SaveChanges:=False
    End If

    If answer = vbYes Then
        ActiveWorkbook.Save
        ActiveWorkbook.SaveAs ("C:\Users\me\Documents\reports\Backup\" + ActiveWorkbook.Name & Format(Now(), "DD-MMM-YYYY hh-mm") & ".xlsm")
        Exit Sub
    End If

End Sub

最佳答案

尝试这个:

您已经关闭了工作簿,因此无需在代码中再次关闭它。只是“欺骗”Excel 认为更改已保存为 ThisWorkbook.Saved = True (注意:这只告诉 Excel 更改已保存 - 它实际上并没有保存它们 )并且它不会提示您保存更改。

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Select Case MsgBox("Do you want to save Changes?", vbYesNoCancel)
    Case vbCancel
        Cancel = True
    Case vbNo
        ThisWorkbook.Saved = True
    Case vbYes
        ThisWorkbook.Save
        ThisWorkbook.SaveAs ("C:\Users\me\Documents\reports\Backup\" + ActiveWorkbook.Name & Format(Now(), "DD-MMM-YYYY hh-mm") & ".xlsm")
    End Select

End Sub

并使用 ThisWorkbook在你的情况下将是一个更好的对象,而不是使用 ActiveWorkbook .

关于excel - MsgBox 使用 If answer = Yes/No/Cancel 出现两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53217730/

相关文章:

excel - Excel VBA中单元格的引用部分

excel - Outlook 电子邮件正文不会复制到 Excel

excel - Excel中300万行端口数据来自txt

vbscript - VBS 脚本 - 需要将 msgbox 更改为 echo

android - 仅更改 AlertDialog 中的字体大小

vba - MsgBox SelectionChange 定义范围

python - 尝试使用 Python 从 excel 电子表格中删除第一行

vba - Excel - "File Not Found: VBA6.DLL"

excel - 查找第二个 vlookup 值

vba - 每 2 小时运行一次宏 仅当前一次运行完成时