/ / Makro stoppt, wenn Anweisung falsch ist - vba, excel-vba, excel

Macro stoppt bei falscher Anweisung - vba, excel-vba, excel

Der folgende Code sollte bestimmte Seiten drucken, wenn der Wert in einer Zelle 1 ist.

Wenn der Wert der zu testenden Zelle nicht 1 ist, wird das Makro angehalten.

Was kann ich ändern, um das Makro bis zum Ende fortzusetzen?

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

Antworten:

2 für die Antwort № 1

Versuchen Sie es stattdessen auf diese Weise.

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 für die Antwort № 2

Ich schätze den viel besser lesbaren Code von niton und sehe in Ihrer Frage eine wertvolle Gelegenheit, das Refactoring zu diskutieren.

" 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

Dieser Code hat folgende Vorteile:

  1. Auf diese Weise sind die letzten 5 Zeilen der einzige Code, über den Sie nachdenken müssen. Der Rest ist eine einfache Konfiguration, mit der die letzten Zeilen funktionieren.
  2. Beispielsweise könnte mit einem nächsten Szenarioschritt die gesamte Konfiguration gelesen werden, z. aus einer XML-Datei fast ohne Aufwand. Die letzten fünf Zeilen würden sich dadurch kaum ändern.

Ich habe den Code in Excel grob überprüft, daher sollte es kein Problem damit geben.

Ich hoffe das inspiriert mich :-)