【发布时间】:2018-02-23 11:26:34
【问题描述】:
我试图确保对于电子表格中的每一行,如果单元格 B 或 C 未填充(在范围内),则消息框会提醒用户 - 并且不允许保存它。
我已将工作簿保存为启用宏 (XLSM) 的文件 - 但 Workbook_BeforeSave 似乎没有触发。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim rng1 As Range
Dim rng2 As Range
MsgBox "hi"
Set rng1 = ActiveSheet.Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(3, 4)).Select
Stop
'turn off events to avoid code retriggering itself
Application.EnableEvents = False
For Each rng2 In rng1
If Cells(rng2.Row, "B") = vbNullString Then
MsgBox "Please Enter Something in Cell B - your entry will be deleted", vbOKOnly
rng2.Value = vbNullString
End If
If Cells(rng2.Row, "C") = vbNullString Then
MsgBox "Please Enter Something in Cell C - your entry will be deleted", vbOKOnly
rng2.Value = vbNullString
End If
Next
Application.EnableEvents = True
End Sub
谁能看到我哪里出错了?已为工作簿启用宏。
感谢您的建议,
标记
【问题讨论】:
-
这是因为你有
Application.EnableEvents = False。 -
它在正确的工作簿中吗?从屏幕截图顶部的两个下拉列表中选择 Workbook,然后选择 BeforeSave。如果这没有选择您的代码,而是创建了一个空的过程存根,那么将您的代码移动到这个存根中。
-
嗨,安迪 - 是的,它在 WorkBook_BeforeSave 中