2014-01-05 19 views
1

我在表單上有一個命令按鈕代碼,該代碼在保存工作表之前檢查表中的所有單元格是否已完成。如果它們不全部完成,彈出一個用戶窗體消息框並提示,然後返回到表單而不保存。我希望能夠從'BeforeClose'事件中調用它,但是,即使它仍然按照它應該做的操作,在用戶窗體消息框顯示並被卸載之後,它仍然會彈出「保存」對話框。在關閉事件之前禁止保存對話

我竭力壓制保存對話框或自動選擇「取消」,返回到片編輯

Option Explicit 

Dim WSh As Worksheet 
Dim Create As Boolean 
Dim Pipe As Worksheet 
Dim LR As Long, i As Long 
Dim c As Variant 
Dim d As Variant 
Dim u As Variant 
Dim target As Variant 

Private Sub CommandButton1_Click() 

Application.ScreenUpdating = False 

Set Pipe = Sheets("Pipe Cleaning") 

Select Case Pipe.Range("N1") 

Case Is = False 

For Each d In Range("L18:L113") 

If d.Value >= 1 And d.Value <= 4 Then 
Mbox.Show 
Exit Sub 
End If 

Next d 

Case Is = True 

For Each u In Range("L18:L113") 

If u.Value >= 1 And u.Value <= 3 Then 
Mbox.Show 
Exit Sub 
End If 

Next u 

End Select 





Pipe.Activate 
Pipe.Unprotect 

Range("A8:A15").EntireRow.Hidden = False 

For Each c In Range("A8:A15") 
Select Case c.Value 
Case Is = "" 
    c.EntireRow.Hidden = True 

End Select 
Next c 

Pipe.Protect 

ActiveWorkbook.Save 
Application.ScreenUpdating = True 
End Sub 
+0

另請參見:http://www.mrexcel。 com/forum/excel-questions/748420-suppress-save-dialog-before-close-event.html – pnuts

+0

谷歌似乎顯示了很多答案,我認爲在SE上還有其他人。如果那些不合適,你會介意以什麼方式解釋? – pnuts

+1

他們似乎不適合,因爲他們似乎想要保存工作簿,因爲我不這樣做,只想返回到工作表並重新編輯。顯示警報提到了很多,但這不適用於我 – elmonko

回答

1

有一對夫婦在這裏不同的問題。

您需要重新安置的代碼檢查,如果該表的有效期爲保存到其自身的功能(一切從Set pipe =End Select加上任何相關的變量聲明)。如果我們可以保存,那麼該函數返回True;如果我們不能確定,然後返回False

一旦這樣做了Click事件過程只需調用該函數並檢查返回值來決定是否要保存工作簿

同樣的BeforeClose事件過程中可以使用決定我們是否可以保存的功能。如果函數返回False,那麼你會在BeforeClose程序的Cancel參數設置爲True,以防止工作簿從關閉

您可能需要考慮BeforeSave事件過程中是否也需要進行這樣的檢查

由於您的程序在保存之前做了其他工作(隱藏或取消隱藏行),因此您可能希望將其移到單獨的Sub中,並從任何需要它的事件過程中調用它

相關問題