VBA:Workbook.Close循环

时间:2015-06-02 13:50:23

标签: excel-vba vba excel

对于给定的活动工作表,我有以下部分代码:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim sh As Worksheet
Dim myMessage
    If ActiveSheet.Range("I5").Value > 0 Then
        MsgBox "Some cells are empty" _
        & Chr(13) & Chr(13) & "Please, fill in the empty cells to proceed", _
        vbExclamation + vbOKOnly, "ERROR!"
        Cancel = True
    Else
        ThisWorkbook.Unprotect ("123")
        Worksheets("Instructions").Visible = True
        Worksheets("Instructions").Activate
        For Each sh In Worksheets
            If sh.Name <> "Instructions" Then
                sh.Visible = xlVeryHidden
            End If
        Next sh
        ThisWorkbook.Protect ("123")
        myMessage = MsgBox("Do you want to save and close this file?", vbQuestion + vbYesNo, "Workbook 1")
            If myMessage = vbYes Then
                Application.DisplayFormulaBar = True                    
                ThisWorkbook.Close True
            ElseIf myMessage = vbNo Then
                Cancel = True
            Else
                'nothing
            End If

    End If
End Sub

通常,在按下工作簿本身上的关闭按钮时,想法是检查给定活动工作表的给定单元格是否为非零值。如果它不为零,则用户必须首先填写某些空单元格,并且不关闭工作簿。或者,&#34;指令&#34;工作表被激活,用户收到一个消息框,说明下一步该做什么(通过这样做,而不是简单地没有msgbox并坚持使用常规系统&#34; SAVE / NO&#34;提示,是我要消除用户按下&#34; No&#34;按钮的可能性,这将导致不进行保存)。我唯一的问题是当用户选择&#34;是&#34;时我得到的一次性循环。回答:重新出现相同的消息框(显然,因为该过程再次通过代码行!)。 如果你能以我避免这种循环的方式建议我,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果您不允许用户不保存,那么为什么不强行保存。您可以替换整个消息框提示部分:

myMessage = MsgBox("Do you want to save and close this file?", vbQuestion + vbYesNo, "Workbook 1")
        If myMessage = vbYes Then
            Application.DisplayFormulaBar = True                    
            ThisWorkbook.Close True
        ElseIf myMessage = vbNo Then
            Cancel = True
        Else
            'nothing
        End If

ThisWorkbook.Save

这将强制保存并关闭工作簿。