在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