Excel VBA:工作簿。关闭循环

Excel VBA:工作簿。关闭循环,excel,vba,Excel,Vba,对于给定的活动工作表,我有以下代码部分: 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, fi

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

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
Private子工作簿\u关闭前(取消为布尔值)
将sh设置为工作表
暗淡的myMessage
如果ActiveSheet.Range(“I5”)值>0,则
MsgBox“某些单元格为空”_
&Chr(13)和Chr(13)&“请填写空白单元格继续”_
VBEQUOTION+vbOKOnly,“错误!”
取消=真
其他的
此工作簿。取消保护(“123”)
工作表(“说明”)。可见=真实
工作表(“说明”)。激活
对于工作表中的每个sh
如果sh.名称为“说明”,则
sh.可见=xlVeryHidden
如果结束
下一个sh
此工作簿。保护(“123”)
myMessage=MsgBox(“是否保存并关闭此文件?”,vbQuestion+vbYesNo,“工作簿1”)
如果myMessage=vbYes,则
Application.DisplayFormulaBar=True
此工作簿。关闭“真”
ElseIf myMessage=vbNo然后
取消=真
其他的
”“没有
如果结束
如果结束
端接头
通常,在按下工作簿本身上的“关闭”按钮时,可以检查给定活动工作表的给定单元格是否存在非零值。如果非零,则用户必须先填写某些空单元格,并且工作簿不会关闭。或者,激活“说明”工作表,用户收到一个关于下一步操作的消息框(这样做,而不是简单地不使用msgbox并坚持使用通常的系统“保存/否”提示,是为了消除用户按下“否”按钮导致不保存的可能性)。我唯一的问题是,当用户选择“是”答案时,我会得到一个一次性循环:相同的消息框会重新出现(显然,因为该过程再次通过代码行!)。
如果您能建议我避免此循环的方法,我将不胜感激。

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

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


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

为什么需要复制Excel中已实现的功能:工作簿关闭时弹出的对话框提示“是否保存更改…”,带有3个标准选项按钮?致以最良好的祝愿,@AlexBell,谢谢你的评论。正如我在问题部分提到的,我希望避免用户意外按下“否”按钮的可能性,这将导致不进行保存。这是我实现自己的消息框的唯一原因。哦,天哪!太容易了!事实上,我以前在代码中使用过ThisWorkbook.Save行,但后来键入了ThisWorkbook.Close(我查看了.Save功能,就好像它只保存我的工作簿一样。但我没有考虑Excel已经实现工作簿的关闭这一事实!现在,我意识到了我的错误。非常感谢,@daytonrazorback!
ThisWorkbook.Save