好吧,我最后还是有了这个。我已经搜索了正确的代码来完成这项工作,但到目前为止还没有任何工作。我开始怀疑我的语法在覆盖我的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
您的任何建议都将不胜感激!
答案 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
答案 2 :(得分:0)
If PO.Range("D14").Value<> vbNullString Then
PO.PrintOut
End If