【问题标题】:MsgBox comes up twice using If answer = Yes/No/CancelMsgBox 使用 If answer = Yes/No/Cancel 出现两次
【发布时间】:2018-11-08 23:33:13
【问题描述】:

我正在尝试创建一个宏,它会在关闭 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 vba msgbox


    【解决方案1】:

    试试这个:

    您已经关闭了工作簿,因此无需在您的代码中再次关闭它。只是“欺骗” 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 更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 2018-05-08
      • 2015-05-01
      • 2012-12-18
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多