【问题标题】:Workbook_BeforeClose MsgBox BugWorkbook_BeforeClose MsgBox 错误
【发布时间】:2017-05-13 11:23:18
【问题描述】:

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

下面是我目前设法想出的,放在 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

【问题讨论】:

    标签: vba excel


    【解决方案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
    

    【讨论】:

    • 就是这样!非常感谢,知道这很简单!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多