如果特定单元格为空,则禁止打印特定表单

时间:2015-10-07 16:38:22

标签: excel vba excel-vba excel-2010

如果我的工作表2上的T5单元格为空,我试图阻止打印功能。我的代码:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    If IsEmpty(Range("T5")) Then
    Cancel = True
    MsgBox ("Insert Employee Number in REPAIR WORKSCOPE tab")
    End If
End Sub

我尝试在IsEmpty命令之前执行ActiveSheet.Name =“Sheet 2”,但是当我尝试运行时,我只会收到错误。

2 个答案:

答案 0 :(得分:0)

您可以使用And来检查两种情况。

If IsEmpty(Range("T5")) And ActiveSheet.Name = "Sheet 2" Then

答案 1 :(得分:0)

Range始终解析为ActiveSheet,除非另有明确限定。

试试这个:

If IsEmpty(Sheets("Sheet2").Range("T5"))

注意:

  

ActiveSheet.Name =“Sheet 2”

这很可能会引发错误,因为这不是您“激活”工作表的方式,如果另一个工作表“活动” Sheet2已经存在,那么您将会得到一个Key错误。你可以这样做:

Sheets("Sheet2").Activate

然后您的原始代码将起作用。

我的偏好是使用另一种方法明确地将范围限定为所需的工作表,并避免需要激活任何东西:)

如果您想阻止第2张打印 ,请执行以下操作:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    If ActiveSheet.Name = "Sheet2" And IsEmpty(Sheets("Sheet2").Range("T5").Value) Then
        Cancel = True
        MsgBox ("Insert Employee Number in REPAIR WORKSCOPE tab")
    End If
End Sub

如果您想要阻止所有打印,请仅基于Sheet2中的T5值:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    If IsEmpty(Sheets("Sheet2").Range("T5").Value) Then
        Cancel = True
        MsgBox ("Insert Employee Number in REPAIR WORKSCOPE tab")
    End If
End Sub