17 Aufrufe
Gefragt in Tabellenkalkulation von pause645 Mitglied (204 Punkte)

Hallo Alle
Ich habe eine Excel Arbeitsmappe mit 40 Arbeitsblättern. Ich möchte aber nur die Arbeitsblätter ausdrucken, welche in der Zelle J23 einen (Zahlen)Wert haben. Ich habe es mit dem nacholgenden Skript versucht. Aber irgend etwas scheint noch faösch zu sein.
Wer kann mir helfen?

Sub DruckenBericht()

    ThisWorkbook.Worksheets(wksh_Bericht).Activate

Dim zelleToCheck As String
   zelleToCheck = J23
    If Not IsEmpty(ws.Range(zelleToCheck).Value) Then
Application.Dialogs(xlDialogPrinterSetup).Show
  ActiveSheet.PrintOut From:=1, To:=1

End If
End Sub

Vielen Dank und beste Grüsse
Paise 645

1 Antwort

0 Punkte
Beantwortet von xlking Experte (2k Punkte)

Lol, "Irgendwas" ist gut. Wenn das dein ganzer Code sein sollte, dann ist fast jede Zeile falsch. Fangen wir mal oben an.

ThisWorkbook.Worksheets(wksh_Bericht).Activate funktioniert nur wenn du zuvor der Variablen wksh_Bericht einen Text zugewiesen hast. Das macht man z.B. mit wksh_Bericht = "Tabelle1"

zelleToCheck = J23 kann so nicht klappen, da J23 so wie du es verwendest, eine Variable darstellt. Setze es in Anführungszeichen um Text zu erhalten. zelleToCheck = "J23"

If Not IsEmpty(ws.Range(zelleToCheck).Value) Then geht nur wenn du ws zuvor eine Blattobjekt zugewiesen hast. Das kannst du z.B. mit Set ws=Sheets("Tabelle1") machen.

Was ich an dieser Stelle vermisse ist eine Schleife mit der du durch die Tabellenblätter gehst. z.B. For i=1 to Sheets.Count
Set ws = Sheets(i)
Next i

Aber gehen wir zum nächsten: Application.Dialogs(xlDialogPrinterSetup).Show. Willst du wirklich bei jedem Blatt die Druckereinstellungen erneut anpassen? Das reicht doch sicher nur einmal aus? Mache das also vor der Schleife.

Und ActiveSheet.PrintOut From:=1, To:=1 bringt nur was, wenn du zuvor jedes Sheet innerhalb der Schleife mit ws.Activate anzeigst. darauf kannst du aber auch verzichten, indem du direkt ws.PrintOut From:=1, To:=1 in die Schleife schreibst.

Gruß Mr. K.

...