2014-04-08 93 views
2

下面的代碼應打印的特定頁面,如果在一個單元中的值是1。宏停止if語句假

當被測試的單元格的值不爲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

試試這個方法。

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 
0

我很欣賞氡的更可讀的代碼,我在你的問題中看到的是旅遊居停機會討論重構。關注此:

' 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行。剩下的就是使最後一行工作的簡單配置。例如,在下一個場景步驟中,整個配置可以被讀取,例如,從一個XML文件幾乎沒有任何努力。最後五行幾乎不會因此而改變。

我大致檢查了Excel中的代碼,所以應該沒有問題。

我希望這給了一些靈感:-)