Workbook_Before关闭MsgBox Bug

时间:2017-05-13 11:23:19

标签: excel vba excel-vba

我尝试创建一个控件,要求用户在关闭工作簿之前在特定单元格中输入信息。如果用户尝试关闭时单元格为空,则应提示他们保留在工作簿中并输入信息或退出而不保存。如果填充了单元格,则工作簿应自动保存。

以下是我到目前为止提出的内容,放在ThisWorkbook对象中。我遇到的问题是,在MsgBox出现并选择了一个选项后,它会再次出现。我无法弄清楚为什么会发生这种情况所以希望有人在这里可以指出我错过了什么。

注意,我只希望关闭当前活动工作簿,而不是要退出整个应用程序。因此,如果用户打开了其他Excel窗口,我也不希望这些窗口也被关闭。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Range(“A1”).Value = “” Then
        OutPut = Msgbox (“A1 is empty. Exit without saving?”, vbOKCancel + vbDefaultButton2)
        If OutPut = 1 Then
            ThisWorkbook.Close False
        Else: Cancel = True
            Exit Sub
        End If
    End If
ActiveWorkbook.Save
End Sub

1 个答案:

答案 0 :(得分:1)

好吧,你尝试使用ThisWorkbook.Close False再次关闭工作簿,这是第二个事件的来源。

相反,请使用ThisWorkbook.Saved = True来阻止弹出确认对话框:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim OutPut As VbMsgBoxResult

    If Range("A1").Value = "" Then
        OutPut = MsgBox("A1 is empty. Exit without saving?", vbOKCancel + vbDefaultButton2)
        If OutPut = vbOK Then
            ThisWorkbook.Saved = True
        Else
            Cancel = True
        End If
    Else
        ThisWorkbook.Save
    End If
End Sub