AW: leere Zeilen nicht drucken (trotz Kontrollkästchen)
06.10.2025 10:25:21
Acki BM
hallo zusammen,
jetzt funktioniert es einwandfrei und ich will Euch den Code nicht vorenthalten.
Obwohl die "leeren" Zeilen mit Kontrollkästchen (Formularsteuerelement) gefüllt sind, werden diese nicht ausgedruckt, wenn Zeilen in Spalte B nicht gefüllt sind.
Sub Drucken()
Dim ws As Worksheet
Dim lastRow As Long
Dim r As Long
Dim rngPrint As Range
Dim cb As CheckBox
Dim hiddenBoxes As Collection
Dim addr As String
Dim prevArea As String
Set ws = ActiveSheet
Set hiddenBoxes = New Collection
On Error Resume Next
lastRow = ws.Cells.Find(What:="*", LookIn:=xlFormulas, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
On Error GoTo 0
If lastRow = 0 Then
MsgBox "Blatt ist leer.", vbInformation
Exit Sub
End If
' Bestimme Druckbereich (nur Zeilen mit Inhalt in Spalte B)
For r = 1 To lastRow
If Trim(ws.Cells(r, "B").Text) > "" Then
If rngPrint Is Nothing Then
Set rngPrint = ws.Rows(r)
Else
Set rngPrint = Union(rngPrint, ws.Rows(r))
End If
End If
Next r
If rngPrint Is Nothing Then
MsgBox "Keine zu druckenden Zeilen in Spalte B gefunden.", vbInformation
Exit Sub
End If
' Vor dem Drucken: alle Formular-CheckBoxes in Spalte G und K ausblenden, deren TopLeftCell in einer Zeile liegt ohne Wert in B
For Each cb In ws.CheckBoxes
With cb
If .TopLeftCell.Column = Range("G1").Column Or .TopLeftCell.Column = Range("K1").Column Then
If Trim(ws.Cells(.TopLeftCell.Row, "B").Text) = "" Then
.Visible = False
hiddenBoxes.Add cb.Name
End If
End If
End With
Next cb
' Temporär Druckbereich setzen, drucken, und wieder aufheben
prevArea = ws.PageSetup.PrintArea
ws.PageSetup.PrintArea = rngPrint.Address
ws.PrintOut Copies:=1
' Sichtbarkeit der ausgeblendeten CheckBoxes wiederherstellen
Dim nm As Variant
For Each nm In hiddenBoxes
On Error Resume Next
ws.CheckBoxes(nm).Visible = True
On Error GoTo 0
Next nm
ws.PageSetup.PrintArea = prevArea
End Sub