在Workbook_BeforeSave事件中调用一个子

我想在Workbook_BeforeSave事件中调用这个Sub:

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为空,文件也会保存。

您应该将Cancel设置为终止保存事件的正确方法。
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不适合,除非您只有一个工作表,并且您已保护工作簿不添加额外的工作表。
我build议的解决scheme是检查Sheets("MySheet").Range("A4")

当然,最懒惰的testing方法是:

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

在保存过程中完成testing,并且不需要子testing。

尝试:

 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 

Exit Sub只是终止子testing(), End完全停止代码执行,从而阻止Workbook_BeforeSave()进一步运行。

如果取消为真,则保存将被阻止:

 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