当单元格不是空白时打印工作表

好吧,我正在用这个结局。 我已经搜遍了正确的代码,使这项工作,但没有任何工作到目前为止。 我开始怀疑我的语法在另一部分覆盖我的IF语句的代码中出了问题。 所有的build议都欢迎。

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

你有任何build议,将不胜感激!

尝试:

 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 

蒂姆的答案是最强大的。 你也可以尝试:

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

请尝试

 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 

输出将是 在这里输入图像说明