2015-01-05 89 views
0

子我想打電話給該小組在Workbook_BeforeSave事件:呼叫在Workbook_BeforeSave事件

Sub test() 
If ActiveSheet.Range("A4") = "" Then 
MsgBox ("Please fill in cell A4!") 
Exit Sub 
Else 
End If 
End Sub 

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
test 
End Sub 

當我點擊保存文件保存即使單元A4是空白。

+0

有沒有可能,對儲蓄,你想要的紙張被'ActiveSheet'實際上並沒有有效嗎?此外,儘管它是一個個人喜好和並非絕對必要,使用'Call'可以幫助你的代碼的可讀性 –

回答

0

嘗試:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
    Call test 
End Sub 

Sub test() 
    If ActiveSheet.Range("A4") = "" Then 
     MsgBox ("Please fill in cell A4!") 
     End 
    End If 
End Sub 

退出小組僅僅終止子試驗(),而結束完全停止代碼執行,從而防止Workbook_BeforeSave()從進一步運行。

2

您應該設置取消來停止保存事件的正確方法。
這將是最好有test的功能,這樣你就可以檢查返回值,並設置相應取消。

Function test() as Boolean 
If ActiveSheet.Range("A4") = "" Then 
    Test = False 
Else 
    Test = True 
End If 
End Sub 

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
If test = False then Cancel=True 
End Sub 

而且,ActiveSheet是不恰當的,除非你只有一個工作表,並且已經從有額外的牀單添加保護工作簿。
我建議的解決辦法是檢查Sheets("MySheet").Range("A4")

當然,做測試的最懶的辦法是:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
cancel = (ActiveSheet.Range("A4") = "") 
End Sub 

在測試在保存過程中完成的,並且不需要子測試。

+0

或'取消=不Test' :) – brettdj

+0

@brettdj,是的,我知道。這是爲了說明的目的。檢查編輯的最快捷方式:) – SeanC

+0

一個很好的編輯:)。 – brettdj

0

如果取消是真實的,保存將被阻止:

Sub Test(byref cancel as boolean) 
    If ActiveSheet.Range("A4") = "" Then 
     MsgBox ("Please fill in cell A4!") 
     cancel = true 
     Exit Sub 
    'Else 
    End If 
End Sub 

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
    Test Cancel 
End Sub