[英]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.