我有以下宏来执行before_print检查。必须填充某些字段才能供用户打印模板。宏工作正常,但消息框将出现多次,因为有一个空白字段。意味着如果5个字段中的3个为空白,则消息框将出现(3)次,这意味着用户必须关闭每个消息框。
问题:我希望看到我需要修改的内容,以便消息框只出现一次,无论有多少必填字段留空。我关心的是,如果任何字段为空白,则显示消息框并取消打印作业。
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If ActiveSheet.Name = "Template" Then
Dim jRange As Range
Set jRange = Sheets("Template").Range("C4,C5,B9,B10,B11")
For Each cell In jRange
If cell.Value = "" Then
MsgBox ("Cannot leave Invoice Number, Invoice Date or Vendor Name blank."), vbCritical
Cancel = True
End If
Next
End If
End Sub
协助后修改宏:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If ActiveSheet.Name = "Template" Then
Dim jRange As Range
Set jRange = Sheets("Template").Range("C4,C5,B9,B8,B10")
Dim ReqFields As Boolean
For Each cell In jRange
If cell.Value = "" Then
ReqFields = True
End If
Next
If ReqFields Then
MsgBox ("Cannot leave Invoice Number, Invoice Date or Vendor Name blank."), vbCritical
Cancel = True
End If
End If
End Sub
答案 0 :(得分:1)
不是每次循环显示MsgBox,而是将布尔变量设置为“True”。在循环之后,如果布尔值为true,那么您知道至少有一个字段为空。此时,显示您的错误消息并设置“取消=真”。