如果语句为false,则宏停止

时间:2014-04-08 02:45:28

标签: vba excel-vba excel

如果单元格中的值为1,则下面的代码应打印特定页面。

当被测试的单元格的值不为1时,宏停止。

我可以更改什么才能使宏继续结束?

Sub PrintSalesDocs()

'
' PrintSalesDocs Macro
'

Sheets("Print Menu").Select

Range("C15").Select
Selection.ClearContents
ActiveCell.FormulaR1C1 = "Sales Doc"
Range("B5").Select

If Range("d19").Value = 1 Then
Sheets("trailers").PrintOut Copies:=1

If Range("d20").Value = 1 Then
Sheets("Pricing").PrintOut Copies:=1

If Range("d21").Value = 1 Then
Sheets("Q-Hours").PrintOut Copies:=1

If Range("d22").Value = 1 Then
Sheets("trailer customer info").PrintOut Copies:=1

If Range("d23").Value = 1 Then
Sheets("trailer job card").PrintOut Copies:=1

If Range("d24").Value = 1 Then
Sheets("running gear").PrintOut Copies:=1

If Range("d25").Value = 1 Then
Sheets("finishing").PrintOut Copies:=1

If Range("d26").Value = 1 Then
Sheets("boxes").PrintOut Copies:=1

If Range("d27").Value = 1 Then
Sheets("bottom dpr").PrintOut Copies:=1

If Range("d28").Value = 1 Then
Sheets("c-sider").PrintOut Copies:=1

If Range("d29").Value = 1 Then
Sheets("log trlr").PrintOut Copies:=1

If Range("d30").Value = 1 Then
Sheets("skel-fd").PrintOut Copies:=1

If Range("d31").Value = 1 Then
Sheets("tank trl").PrintOut Copies:=1

If Range("d32").Value = 1 Then
Sheets("stock tr").PrintOut Copies:=1

If Range("d33").Value = 1 Then
Sheets("panel").PrintOut Copies:=1

If Range("d34").Value = 1 Then
Sheets("transporter").PrintOut Copies:=1

If Range("d35").Value = 1 Then
Sheets("tipper-srb").PrintOut Copies:=1

If Range("d36").Value = 1 Then
Sheets("tipper-ars").PrintOut Copies:=1

If Range("d38").Value = 1 Then
Sheets("checksheet steer axle").PrintOut Copies:=1

If Range("d39").Value = 1 Then
Sheets("checksheet kingpin").PrintOut Copies:=1

If Range("d40").Value = 1 Then
Sheets("checksheet 5th wheel").PrintOut Copies:=1

If Range("d41").Value = 1 Then
Sheets("checksheet m911d").PrintOut Copies:=1

If Range("d42").Value = 1 Then
Sheets("checksheet finishing").PrintOut Copies:=1

If Range("d43").Value = 1 Then
Sheets("checksheet brakes").PrintOut Copies:=1

If Range("d44").Value = 1 Then
Sheets("checksheet pre-delivery").PrintOut Copies:=1

If Range("d45").Value = 1 Then
Sheets("checksheet quality").PrintOut Copies:=1

If Range("d46").Value = 1 Then
Sheets("checksheet pre-dispatch").PrintOut Copies:=1

If Range("d47").Value = 1 Then
Sheets("checksheet dispatch").PrintOut Copies:=1

End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If

End Sub

2 个答案:

答案 0 :(得分:2)

请尝试这种方式。

Sub PrintSalesDocs()

'
' PrintSalesDocs Macro
'

Sheets("Print Menu").Select

Range("C15").Select
Selection.ClearContents
ActiveCell.FormulaR1C1 = "Sales Doc"
Range("B5").Select

If Range("d19").Value = 1 Then
    Sheets("trailers").PrintOut Copies:=1
End If

If Range("d20").Value = 1 Then
    Sheets("Pricing").PrintOut Copies:=1
End If
...

If Range("d46").Value = 1 Then
    Sheets("checksheet pre-dispatch").PrintOut Copies:=1
End If

If Range("d47").Value = 1 Then
    Sheets("checksheet dispatch").PrintOut Copies:=1
End If

End Sub

答案 1 :(得分:0)

我很欣赏niton更易读的代码,我在你的问题中看到了讨论重构的有价值的机会。看这个:

' Part 1: making a configuration
Dim table As Collection
Set table = New Collection

Dim row
row = Array("d19", "trailers")
table.Add row
row = Array("d20", "Pricing")
table.Add row
row = Array("d21", "Q-Hours")
table.Add row

...

row = Array("d46", "checksheet pre-dispatch")
table.Add row
row = Array("d47", "checksheet dispatch")
table.Add row

' Part 2: doing the work according to the configuration
For Each row In table
   If Range(row(0)) = 1 Then
      Sheets(row(1)).PrintOut Copies:=1
   End If
Next

此代码具有以下优点:

  1. 这样,你必须提出一些想法的唯一代码是最后5行。其余的是简单的配置,使最后的行工作。
  2. 例如,在下一个场景步骤中,可以读取整个配置,例如,从一个XML文件几乎没有努力。由于这个原因,最后五行几乎不会改变。
  3. 我已经大致检查了Excel中的代码,因此应该没有问题。

    我希望这能带来一些灵感: - )