在打印前检查单元格是否包含数据 - 运行时错误

时间:2015-05-14 07:25:06

标签: excel-vba runtime-error vba excel

我一直在电子表格上做一些工作,直到现在,我已经能够解决在线搜索问题。我对VBA比较陌生,并且通过在线研究构建了大部分内容,因此这可能是一种非常垃圾的方式。不幸的是我遇到了以下代码的问题,它给了我一个类型不匹配错误(运行时13)。我怀疑代码是非常自我解释的,但是我实际上是在某些单元格未完成的情况下尝试禁用打印。运行时错误突出显示粗体部分。

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim Response As Integer
With Sheets("Settlement Instruction")
    **If .Range("M1").Value = "" Or .Range("P1").Value = "" _
        Or .Range("E2").Value = "" Or .Range("E3").Value = "" Or .Range("E4").Value = "" Or .Range("M4").Value = "" Or .Range("U3").Value = "" _
        Or (.Range("M1").Value = "WA" And .Range("P1").Value = "Settlement" And .Range("T22").Value = "") _
        Or (.Range("P1").Value = "Outsource" And (.Range("C32").Value = "" Or .Range("H37").Value = "" Or .Range("C44").Value = "")) _
        Or (.Range("P1").Value = "Settlement" And (.Range("G6").Value = "" Or .Range("F8").Value = "" Or .Range("N8").Value = "" Or .Range("F9").Value = "" Or .Range("C32").Value = "" Or .Range("Q35").Value = "" Or .Range("Q36").Value = "" Or .Range("H37").Value = "" Or .Range("F41").Value = "" Or .Range("C44").Value = "")) _
        Or (.Range("P1").Value = "Rego Only" Or "Prep Only" And (.Range("F16").Value = "" Or .Range("F41").Value = "" Or .Range("C44").Value = "")) Then**
        Response = MsgBox("Please complete all mandatory fields marked in YELLOW.", vbOK, "Information Required")
        If Response = vbOK Then
            Cancel = True
        ElseIf Response = vbCancel Then
            Cancel = True

        End If
    End If
End With

在此之前,我使用了以下代码(除了一些检查不正确):

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim Response As Integer
With Sheets("Settlement Instruction")
    If (.Range("M1").Value = "" Or .Range("E2").Value = "" Or .Range("P1").Value = "" Or .Range("E3").Value = "" Or .Range("E4").Value = "" Or .Range("M4").Value = "" Or .Range("U3").Value = "" Or .Range("C32").Value = "" Or (.Range("P1").Value <> "Outsource" And .Range("F41").Value = "" And .Range("Q35").Value = "" And .Range("Q36").Value = "") Or .Range("C44").Value = "" Or .Range("H37").Value = "" Or (.Range("P1").Value = "Settlement" And (.Range("G6").Value = "" Or .Range("F8").Value = "" Or .Range("N8").Value = "" Or .Range("F9").Value = "")) Or (.Range("P1").Value = "Settlement" And .Range("M1").Value = "WA" And .Range("T22") = "")) Then
        Response = MsgBox("Please complete all mandatory fields marke in YELLOW.", vbOK, "Information Required")
        If Response = vbOK Then
            Cancel = True
        ElseIf Response = vbCancel Then
            Cancel = True

        End If
    End If
End With

部分更改是使代码更容易使用而不是在同一行,但是我需要对已完成的检查进行一些更改。 我主要是追求一件事。是否有人能够看到导致运行时错误的原因。我确实检查了微软的信息我觉得它是(因为时间限制我看了几天),我唯一可以推断的是,我可能会将值检查为文本而不是整数。然后我将只有2个整数字段的格式更改为文本,但仍然存在相同的问题。

非常感谢任何协助。

1 个答案:

答案 0 :(得分:0)

您因此而收到错误

.Range("P1").Value = "Rego Only" Or "Prep Only" 

你不能像那样使用它

将其更改为

.Range("P1").Value = "Rego Only" Or .Range("P1").Value = "Prep Only"