/ / Makro zatrzymuje się, jeśli instrukcja false - vba, excel-vba, excel

Makro zatrzymuje się, jeśli instrukcja false - vba, excel-vba, excel

Poniższy kod powinien wydrukować konkretne strony, jeśli wartość w komórce wynosi 1.

Gdy wartość testowanej komórki nie wynosi 1, makro zatrzymuje się.

Co mogę zmienić, aby makro trwało do końca?

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

Odpowiedzi:

2 dla odpowiedzi № 1

Spróbuj w ten sposób.

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 dla odpowiedzi nr 2

Doceniam znacznie bardziej czytelny kod Nitona i widzę w Twoim pytaniu cenną okazję do omówienia refaktoryzacji. Obserwuj to:

" 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

Ten kod ma następujące zalety:

  1. W ten sposób jedynym kodem, który musisz podać, są ostatnie 5 linii. Reszta to prosta konfiguracja, dzięki której ostatnie linie działają.
  2. Na przykład, w kolejnym kroku scenariusza można odczytać całą konfigurację, np. z pliku XML prawie bez wysiłku. Z tego powodu pięć ostatnich linii prawie się nie zmieni.

Z grubsza sprawdziłem kod w Excelu, więc nie powinno być z tym problemu.

Mam nadzieję, że to daje trochę inspiracji :-)