单元格不为空时打印工作表

时间:2016-09-16 23:30:02

标签: excel vba is-empty

好吧,我最后还是有了这个。我已经搜索了正确的代码来完成这项工作,但到目前为止还没有任何工作。我开始怀疑我的语法在覆盖我的IF语句的代码的另一部分中出现了问题。欢迎所有建议。

我想要的:我有一个程序可以从一个订单表格中为不同的公司打印多个采购订单。有时我们不会从一家公司订购任何东西,所以我不希望代码允许打印订单。我认为通过检查某个单元格是否为空,它会停止打印。在下面的代码中,“D14”通常是要排序的QTY,因此它是一个数值。但到目前为止还没有任何工作。代码仍然允许打印所有可能的订单表格,即使没有订购,单元格“D14”为空。

到目前为止我尝试过的事情:

    If Not IsEmpty(PO.Range("D14")) Then
    PO.PrintOut
    End If

    If PO.Range("D14") = IsEmpty(False) Then
    PO.PrintOut
    End If
    End With

    If PO.Range("D14") <> "" Then
    PO.PrintOut
    End If
    End With

以下是整个代码块,以便您可以更好地了解我要完成的任务。

    Private Sub cmbPrintEchoFrance_Click()
    Dim OrderForm As Worksheet
    Dim PO As Worksheet
    Dim SoapList As ListObject
    Dim lRow As Long
    Dim rngToCopy As Range, rRange As Range

    Set OrderForm = Worksheets("ORDER FORM")
    Set PO = Worksheets("PRINT ORDER")

    Set SoapList = Worksheets("ORDER FORM").ListObjects("SOAP_LIST")
    Application.ScreenUpdating = False
    With OrderForm
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row

        Set rRange = .Range("A1:A" & lRow)

    'Remove any filters
    .AutoFilterMode = False

        With rRange
        'print the Australian Natural Soaps order
            .AutoFilter Field:=3, Criteria1:="AUSTRALIAN SOAPS"
            .AutoFilter Field:=1, Criteria1:="<>"
            .Range("A1:A" & lRow).Copy PO.Range("D14")
            .Range("B1:B" & lRow).Copy PO.Range("E14")
            .Range("D1:D" & lRow).Copy PO.Range("F14")
            PO.Range("E12").Value = "AUSTRALIAN NATURAL SOAPS"
            If PO.Range("D14") = IsEmpty(False) Then
            PO.PrintOut
            End If
        End With

          'clear print order
        PO.Range("D14:F84").Clear
        PO.Range("D14:F84").ClearFormats

        With rRange
        'print the Echo France order
            .AutoFilter Field:=3, Criteria1:="ECHO FRANCE"
            .AutoFilter Field:=1, Criteria1:="<>"
            .Range("A1:A" & lRow).Copy PO.Range("D14")
            .Range("B1:B" & lRow).Copy PO.Range("E14")
            .Range("D1:D" & lRow).Copy PO.Range("F14")
            PO.Range("E12").Value = "ECHO FRANCE"
            If Not IsEmpty(PO.Range("D14")) Then
            PO.PrintOut
            End If
        End With


'clear print order
PO.Range("D14:F84").Clear
PO.Range("D14:F84").ClearFormats

With rRange
    'print the european soaps order
    .AutoFilter Field:=3, Criteria1:="EUROPEAN SOAPS"
    .AutoFilter Field:=1, Criteria1:="<>"
    .Range("A1:A" & lRow).Copy PO.Range("D14")
    .Range("B1:B" & lRow).Copy PO.Range("E14")
    .Range("D1:D" & lRow).Copy PO.Range("F14")
    PO.Range("E12").Value = "EUROPEAN SOAPS"
   If Not IsEmpty(PO.Range("D14")) Then
    PO.PrintOut
    End If
End With

 'clear print order
PO.Range("D14:F84").Clear
PO.Range("D14:F84").ClearFormats

With rRange
    'print the la lavande order
    .AutoFilter Field:=3, Criteria1:="LA LAVANDE"
    .AutoFilter Field:=1, Criteria1:="<>"
    .Range("A1:A" & lRow).Copy PO.Range("D14")
    .Range("B1:B" & lRow).Copy PO.Range("E14")
    .Range("D1:D" & lRow).Copy PO.Range("F14")
    PO.Range("E12").Value = "LA LAVANDE"
    If Not IsEmpty(PO.Range("D14")) Then
    PO.PrintOut
    End If
End With

 'clear print order
PO.Range("D14:F84").Clear
PO.Range("D14:F84").ClearFormats

    End With
    SoapList.Range.AutoFilter Field:=1
    SoapList.Range.AutoFilter Field:=3
    Application.ScreenUpdating = True

End Sub

您的任何建议都将不胜感激!

3 个答案:

答案 0 :(得分:1)

尝试:

Debug.Print "D14 is = '" & Trim(PO.Range("D14").Value) & "' (Len=" & _
            Len(Trim(PO.Range("D14").Value)) & ")"
If Len(Trim((PO.Range("D14").Value)))>0 Then
    PO.PrintOut
End If

答案 1 :(得分:0)

请尝试

if po.range("d14").value <> "" then
    the action
end if

编辑:

我在空白工作表上尝试了以下代码。

Sub test()
    If Range("A1").Value = "" Then
        MsgBox "A1 is blank."
    End If
End Sub

输出将是 enter image description here

答案 2 :(得分:0)

蒂姆的答案是最强劲的。您也可以尝试:

If PO.Range("D14").Value<> vbNullString Then
    PO.PrintOut
End If