Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Leere Zeilen beim Drucken automatisch ausblenden - mit VBA Code Excel

Mitglied: winget

winget (Level 1) - Jetzt verbinden

05.02.2014, aktualisiert 11:22 Uhr, 8304 Aufrufe, 9 Kommentare, 4 Danke

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
Mitglied: colinardo
05.02.2014, aktualisiert um 12:42 Uhr
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.
01.
Private Sub Workbook_BeforePrint(Cancel As Boolean)
02.
    FilterEmpty
03.
End Sub
04.

05.
Sub FilterEmpty()
06.
    Dim ws As Worksheet, dt As ListObject
07.
    Set ws = Worksheets(1)
08.
    Set dt = ws.ListObjects("MeineTabelle")
09.
    dt.Range.AutoFilter Field:=1, Criteria1:="<>"
10.
End Sub
Grüße Uwe
Bitte warten ..
Mitglied: winget
05.02.2014, aktualisiert um 14:35 Uhr
Hi Uwe,
ich bekomme immer die Meldung "Index außerhalb des gültigen Bereichs" - genau in der Zeile 8.
So ich habe folgendes gemacht. > z.B. meine Tabelle heißt "2014.xls" mein Arbeitsblatt (Worksheet1) heißt "Januar".
Ich habe dein Code wie du mir gesagt hast bei VBAProject>Microsoft Excel Objekte>DieseArbeismappe eingefügt. Der Code sieht wie folgt aus:

01.
Private Sub Workbook_BeforePrint(Cancel As Boolean)
02.
    FilterEmpty
03.
End Sub
04.

05.
Sub FilterEmpty()
06.
    Dim ws As Worksheet, dt As ListObject
07.
    Set ws = Worksheets(1)
08.
    Set dt = ws.ListObjects("2014")
09.
    dt.Range.AutoFilter Field:=1, Criteria1:="<>"
10.
End Sub
Spaßeshalber habe ich in der Zeile 8 auch mit 2014.xls und auch Januar versucht. So:
01.
    Set dt = ws.ListObjects("2014.xls")
und so:
01.
    Set dt = ws.ListObjects("Januar")
Ich bekomme immer wieder die Meldung "Index außerhalb des gültigen Bereichs"!

Beim Dubuggen wird immer die Zeile 8 markiert!

Gruß
Paul
Bitte warten ..
Mitglied: colinardo
05.02.2014, aktualisiert um 14:38 Uhr
Das sind die falschen Namen!!, ich meinte diesen, wenn deine Tabelle markiert ist:

0e4d62fb94a518eef81fc5f369798496 - Klicke auf das Bild, um es zu vergrößern
Bitte warten ..
Mitglied: winget
05.02.2014 um 15:23 Uhr
Ich habe leider immer noch Excel2003. Deswegen habe ich dir auch einen Screenshot von meiner Tabelleneigenschaften.
Vielleicht kommen wir so auf dem gleichen Nenner:

2a2ca98ad64eeade3090dcceeb4ba1de - Klicke auf das Bild, um es zu vergrößern
Bitte warten ..
Mitglied: colinardo
05.02.2014, aktualisiert um 19:35 Uhr
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:
Set dt = ws.ListObjects(1) 
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
Bitte warten ..
Mitglied: winget
05.02.2014 um 16:20 Uhr
Ok....Jetzt habe ich endlich kappiert was du meinst und es funktioniert auch. Super..Danke!!!
Bitte warten ..
Mitglied: winget
21.02.2014 um 16:25 Uhr
Hi Uwe,
ich hatte diese Sache bereits als gelöst markiert und es funktioniert soweit wunderbar.
Leider funktioniert der Code nur für ein Worksheet. Ich habe mehrere Möglichkeiten probiert, aber leider funktioniert nur für ein Worksheet.

Gibt es eine Möglichkeit, wenn man mehrere Sheets (Arbeitsblätter) hat? Wie gesagt ich arbeite noch mit Excel2003. Wahrscheinlich ist einfacher als ich mir vorstelle.

Viele Dank im Voraus
Bitte warten ..
Mitglied: colinardo
21.02.2014, aktualisiert um 16:33 Uhr
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)
01.
Private Sub Workbook_BeforePrint(Cancel As Boolean)
02.
    FilterEmpty
03.
End Sub
04.

05.
Sub FilterEmpty()
06.
  Dim ws As Worksheet, dt As ListObject  
07.
  for i = 1 to 3
08.
    Set ws = Worksheets(i)
09.
    Set dt = ws.ListObjects(1)
10.
    dt.Range.AutoFilter Field:=1, Criteria1:="<>"
11.
  Next
12.
End Sub
Grüße Uwe
Bitte warten ..
Mitglied: winget
21.02.2014 um 16:40 Uhr
Super!
einfacher als ich dachte!
Vielen Dank!
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Excel VBA vbyesno
gelöst Frage von Florian86Microsoft Office2 Kommentare

Hallo, ich habe folgenden Code Sub AbgerundetesRechteck1_Klicken() Dim wksOrig As Worksheet Dim wksStore As Worksheet Dim lngLastRow As Long ...

VB for Applications
Excel VBA Code
gelöst Frage von specialuserVB for Applications2 Kommentare

Hallo zusammen, Hab hier einen Button in einer Excel mit Makros erstellt. Der Button hat die Funktion aus der ...

Microsoft Office
Excel VBA - PDF
Frage von SabineTMicrosoft Office3 Kommentare

Hallo Zusammen, ich habe ein pdf, über welches ich bereits die OCR Texterkennung laufen lassen habe. Jetzt möchte ich ...

VB for Applications
Excel VBA Programmierung
gelöst Frage von specialuserVB for Applications7 Kommentare

Hallo zusammen, ich suche auf diesem Weg Hilfe bei einer VBA Programmierung. Und zwar geht es darum 2 Dropdownlisten ...

Neue Wissensbeiträge
Humor (lol)

Warum Linux in einer vernetzten Welt einfach keinen Komfort bietet!

Tipp von Snowbird vor 16 StundenHumor (lol)12 Kommentare

Ein interessanter Einblick warum Linux nichts für Geräteübergreifende Arbeit ist :)

Humor (lol)
Zuviel Speicher ist ungesund. :-)
Tipp von Lochkartenstanzer vor 1 TagHumor (lol)14 Kommentare

Moin Kollegen, Heute hatte ich ein ungewöhnliches Aha-Erlebnis: Über das Wochenende habe ich einen einen 6 Jahre alten Bare-Metal ...

Windows Update

KB4517297 verfügbar, behebt Fehler in VB6 VBA VBScript

Information von sabines vor 1 TagWindows Update

Das Update behebt mögliche Fehler in VB6, VBA und VBScript, die durch das Update KB4512486 vom August entstanden sind. ...

Viren und Trojaner

Staatstrojaner soll auch per Einbruch installiert werden können

Information von transocean vor 2 TagenViren und Trojaner5 Kommentare

Moin, Bundesinnenminister Horst Seehofer will dem Verfassungsschutz Wohnungseinbrüche erlauben, um den geplanten Staatstrojaner zu installieren. Gruß Uwe

Heiß diskutierte Inhalte
Hyper-V
Bei Neuaufbau auf Core-Server setzen?
gelöst Frage von dertowaHyper-V33 Kommentare

Hallo zusammen, ich habe vor einigen Monaten die Verantwortung für eine EDV-Landschaft übernommen die seit Jahren von einem Dienstleister ...

Router & Routing
Deinstalliertes Geräte wird in FritzBox noch immer als verbundenes Gerät angezeigt
Frage von imebroRouter & Routing14 Kommentare

Hallo, in meiner FritzBox 7490 wird im Bereich "Funknetz" ein Gereät bei den verbundenen Geräten angezeigt, wobei ich nicht ...

Humor (lol)
Zuviel Speicher ist ungesund. :-)
Tipp von LochkartenstanzerHumor (lol)14 Kommentare

Moin Kollegen, Heute hatte ich ein ungewöhnliches Aha-Erlebnis: Über das Wochenende habe ich einen einen 6 Jahre alten Bare-Metal ...

Batch & Shell
PowerShell - Text an HTMLbody übergeben mit UTF-8 Kodierung
Frage von Pat.batBatch & Shell13 Kommentare

Hallo zusammen, ich stoße momentan auf folgendes Problem. Ich möchte mit meinem Skript E-Mails versenden. Text und Signatur samt ...