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.