运行时错误1004 - BeforePrint - 如果单元格为空,则避免打印

时间:2017-12-03 02:25:48

标签: excel vba excel-vba runtime-error

我正在尝试创建一个宏来阻止用户打印表单,如果他们没有填写所有单元格。但是,我收到一条错误消息:

enter image description here

Private Sub Workbook_BeforePrint(Cancel As Boolean)
If Application.Sheets("Form").Range("B4,C4,D4,E4,F4,G4,H4,I4,J4,K4,L4,M4,B5,C5,D5,E5,F5,G5,H5,I5,J5,K5,L5,M5,B6,C6,D6,E6,F6,G6,H6,I6,J6,K6,L6,M6,B7,C7,D7,E7,F7,G7,H7,I7,J7,K7,L7,M7,B8,C8,D8,E8,F8,G8,H8,I8,B9,C9,D9,E9,F9,G9,H9,I9,B11,C11,D11,E11,F11,G11,H11,I11,B12,C12,D12,E12,F12,G12,H12,I12,B13,C13,D13,E13,F13,G13,H13,I13,B14,C14,D14,E14,F14,G14,H14,I14,B16,C16,D16,E16,F16,G16,H16,I16,B17,C17,D17,E17,F17,G17,H17,I17").Value = "" Then
Cancel = True
MsgBox "Fill out all the cells"
End If
End Sub

我有另一个宏用于另一个具有较少单元格的表单,而且其中一个表现正常:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
If Application.Sheets("Form 2").Range("C4,C5,C6,D4,D5,D6,F4,F5,F6,B8,B9,B10,B11,C8,C9,C10,C11,D8,D9,D10,D11,E8,E9,E10,E11,C13,D13,C16,C17,C18,F16,F17,F18,C22,D22").Value = "" Then
Cancel = True
MsgBox "Fill out all the cells"
End If
End Sub

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

似乎行长度或字符串可以放入范围()的长度有限制。但你可以这样巩固它。另外我认为带有多个单元格的range()的返回值是一个数组,所以我不确定它是否有效将它与你所做的字符串进行比较。

试试这个:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    For Each cell In Application.Sheets("Form").Range("B4:M7,B8:I9,B11:I14,B16:I17")
        If cell.Value = "" Then
          Cancel = True
          MsgBox "Fill out all the cells"
          Exit Sub
        End If
    Next
End Sub