簡體   English   中英

VBA:Workbook.Close循環

[英]VBA: Workbook.Close loop

對於給定的活動工作表,我具有以下代碼部分:

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

通常,在按下工作簿本身上的關閉按鈕時,其想法是檢查給定活動工作表的給定單元格是否為非零值。 如果它不為零,則用戶必須先填寫某些空單元格,並且工作簿不會關閉。 或者,激活“指令”工作表,用戶會收到一個下一步要執行的消息框(通過執行此操作,而不是簡單地沒有msgbox並堅持使用通常的系統“ SAVE / NO”提示,是我要消除用戶按下“否​​”按鈕的可能性,這將導致無法進行保存)。 我唯一的問題是用戶選擇“是”答案時得到的一次性循環:再次出現相同的消息框(顯然是因為該過程再次通過了代碼行!)。 如果您能建議我避免這種循環的方式,我將不勝感激。

如果您不打算允許用戶不保存,那么為什么不強制保存。 您可以替換整個消息框提示部分:

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

這將強制保存並關閉工作簿。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM