Leere Zeilen beim Drucken automatisch ausblenden - mit VBA Code Excel
Hallo zusammen,
folgendes Szenario:
z.B. im Bereich A1:Z2 sind feste Daten (Kopfzeilen bzw. Kopfbereich)
Im Bereich A3:Z100 sind variable Daten. Zeile 101 sind die Summen. Es kann passieren, dass z.B. zwischen Zeile 50 und 100 keine Daten vorkommen. Natürlich kann man diese Daten mit dem Filter ausblenden - aber leider gibt es manchmal Fälle (Hektik, Stress etc), wo man vergisst, diese Zeilen auszublenden und man hat schnell auf dem Druckknopf gedruckt und dann kommen schon ein paar mehr Blätter raus, die man nicht wollte (einfache Papierverschwendung).
Hat jemand eine Idee, wie so eine Tabellenblatt-Code aussehen kann. Ich habe im Netz Macros gefunden, aber die Voraussetzung dafür ist, dass dieser Markro auch gestartet wird (das kann man aber direkt mit dem Filter machen).
Vielen Dank im Voraus
folgendes Szenario:
z.B. im Bereich A1:Z2 sind feste Daten (Kopfzeilen bzw. Kopfbereich)
Im Bereich A3:Z100 sind variable Daten. Zeile 101 sind die Summen. Es kann passieren, dass z.B. zwischen Zeile 50 und 100 keine Daten vorkommen. Natürlich kann man diese Daten mit dem Filter ausblenden - aber leider gibt es manchmal Fälle (Hektik, Stress etc), wo man vergisst, diese Zeilen auszublenden und man hat schnell auf dem Druckknopf gedruckt und dann kommen schon ein paar mehr Blätter raus, die man nicht wollte (einfache Papierverschwendung).
Hat jemand eine Idee, wie so eine Tabellenblatt-Code aussehen kann. Ich habe im Netz Macros gefunden, aber die Voraussetzung dafür ist, dass dieser Markro auch gestartet wird (das kann man aber direkt mit dem Filter machen).
Vielen Dank im Voraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 228794
Url: https://administrator.de/contentid/228794
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo winget,
folgenden Code im VBA-Editor in DieseArbeitsmappe einfügen:
(In Zeile 8 musst du den Namen des ListObjects also den Namen deiner Tabelle angeben [dies ist nicht der Name des Sheets !!])
Der Code benutzt als Referenz ob eine Zeile leer ist die erste Spalte der Tabelle. Dies lässt sich mit dem Parameter Field in Zeile 9 steuern. Die Filterung der Tabelle wird immer automatisch vor dem Drucken durchgeführt. Lass dich von der Druckvorschau nicht täuschen, die Filterung wird erst gemacht wenn du auf Drucken klickst.
Grüße Uwe
folgenden Code im VBA-Editor in DieseArbeitsmappe einfügen:
(In Zeile 8 musst du den Namen des ListObjects also den Namen deiner Tabelle angeben [dies ist nicht der Name des Sheets !!])
Der Code benutzt als Referenz ob eine Zeile leer ist die erste Spalte der Tabelle. Dies lässt sich mit dem Parameter Field in Zeile 9 steuern. Die Filterung der Tabelle wird immer automatisch vor dem Drucken durchgeführt. Lass dich von der Druckvorschau nicht täuschen, die Filterung wird erst gemacht wenn du auf Drucken klickst.
Private Sub Workbook_BeforePrint(Cancel As Boolean)
FilterEmpty
End Sub
Sub FilterEmpty()
Dim ws As Worksheet, dt As ListObject
Set ws = Worksheets(1)
Set dt = ws.ListObjects("MeineTabelle")
dt.Range.AutoFilter Field:=1, Criteria1:="<>"
End Sub
Du verstehst noch nicht was ein ListObject ist, das sind Tabellen mit Spaltenfiltern und Sonderfunktionen. Der Name solch eines ListObject ist in Excel 2003 noch nicht so einfach erreichbar. Wenn du den Namen nicht kennst und es das einzigste ListObject im Sheet ist geht auch folgende Variante:
Eine Liste erzeugt man indem man einen Bereich in einerm Sheet markiert und dann über Rechtsklick > Liste erstellen aus einem normalen Bereich eine Liste erstellt.
Hier ein Sheet als Demo dazu: Demo-Sheet
Grüße Uwe
Set dt = ws.ListObjects(1)
Hier ein Sheet als Demo dazu: Demo-Sheet
Grüße Uwe
Mach in allen Tabellenblättern die du filtern willst jeweils aus den Bereichen ein Liste wie oben bereits mehrfach geschrieben
dann nehme folgenden Code um z.B die Sheets 1-3 zu filtern (lässt sich in Zeile 7 festlegen)
Grüße Uwe
dann nehme folgenden Code um z.B die Sheets 1-3 zu filtern (lässt sich in Zeile 7 festlegen)
Private Sub Workbook_BeforePrint(Cancel As Boolean)
FilterEmpty
End Sub
Sub FilterEmpty()
Dim ws As Worksheet, dt As ListObject
for i = 1 to 3
Set ws = Worksheets(i)
Set dt = ws.ListObjects(1)
dt.Range.AutoFilter Field:=1, Criteria1:="<>"
Next
End Sub