Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: mit VBA mehrere Tabellenblätter drucken

mit VBA mehrere Tabellenblätter drucken
24.03.2015 13:17:45
Dominic
Hallo zusammen,
Ich versuche mit folgendem Skript die zwei Tabellenblätter nach Druck auf einem Button auszudrucken. Insgesamt sind es 9 Tabellenblätter, hier exemplarisch nur 2 aufgeführt:
With ThisWorkbook.Worksheets("A").PageSetup
.Zoom = False
.PrintArea = "$A$6:$L$25"
.Orientation = xlPortrait
.Zoom = 75
.CenterHeader = "&""Comic Sans MS""&16""&I" & "Inventurwerte - A"""
With ThisWorkbook.worksheets("B").PageSetup
.Zoom = False
.PrintArea = "$A$6:$O$76"
.Orientation = xlPortrait
.Zoom = 78
.CenterHeader = "&""Comic Sans MS""&16""&I" & "Inventurwerte - B"""
End With
Application.Dialogs(xlDialogPrint).Show
ActiveSheet.PageSetup.PrintArea = False
Wie muss das Skript abgeändert werden, damit ich das gewünschte Ergebnis erhalte?
Besonderheit: der Druckbereich ist auf jedem Tabellenblatt ein anderer Bereich...
Ebenso wird die Kopfzeile jedesmal anders bezeichnet.
Vielen Dank für Eure Hilfe!

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mit VBA mehrere Tabellenblätter drucken
24.03.2015 15:46:56
fcs
Hallo Dominic,
die zu druckenden Blätter müssen dann vor der Anzeige des Druckdialogs gruppiert werden.
Zum Schluß sollte dann die Gruppierung durch Selektion eines Blatts wieder aufgehoben werden, damit man nicht versehentlich Daten in mehreren Blättern ändert.
Die Liste der Blattnamen im Array muss du dann entsprechend erweiteren.
Gruß
Franz
Sub Test()
With ThisWorkbook.Worksheets("A").PageSetup
.Zoom = False
.PrintArea = "$A$6:$L$25"
.Orientation = xlPortrait
.Zoom = 75
.CenterHeader = "&""Comic Sans MS""&16""&I" & "Inventurwerte - A"""
End With
With ThisWorkbook.Worksheets("B").PageSetup
.Zoom = False
.PrintArea = "$A$6:$O$76"
.Orientation = xlPortrait
.Zoom = 78
.CenterHeader = "&""Comic Sans MS""&16""&I" & "Inventurwerte - B"""
End With
'zu druckende Blätter gruppieren
ThisWorkbook.Sheets(Array("A", "B")).Select
Application.Dialogs(xlDialogPrint).Show
'Gruppierung wieder aufheben
ThisWorkbook.Sheets("A").Select
End Sub

Anzeige
AW: mit VBA mehrere Tabellenblätter drucken
25.03.2015 09:52:44
Dominic
Hi Franz,
super, es funktioniert einwandfrei! Danke!
Wie kann ich noch folgenden Zusatz für jedes Tabellenblatt mit einbringen?
'Rahmenlinie einfügen
Range("L9:L211").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlMedium
End With
Hier kommt der Druckbefehl rein, davor wird eine Rahmenlinie gesetzt, die danach wieder "entfernt" bzw. durch eine andere Rahmenlinie ausgetauscht wird.
'Rahmenlinie Entfernen, und reguläre Rahmenlinien einfügen
Range("L9:L211").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlHairline
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlDouble
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThick
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlHairline
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlHairline
End With

Anzeige
AW: mit VBA mehrere Tabellenblätter drucken
25.03.2015 10:35:50
Dominic
Nachtrag: Dieser Bereich bei dem die Rahmenlinien hier zugefügt werden sollen ist für jedes Tabellenblatt variabel, wie auch schon beim "gelösten Druckbereich".

AW: mit VBA mehrere Tabellenblätter drucken
25.03.2015 11:39:54
fcs
Hallo Dominic,
wenn die Rahmen immer in der gleichen Weise formatiert werden und sich nur der Bereich auf den einzelnen Blättern ändert, dann kann man es wie folgt lösen. Die Formatierung erfolgt in einer Unterroutine, der der zu formatierende Bereich als Parameter übergeben wird.
Gruß
Franz
Sub Test()
Application.ScreenUpdating = False
With ThisWorkbook
With .Worksheets("A")
Call prcRahmenSetzen(rngBereich:=.Range("L9:L211")) 'Bereich anpassen !
With .PageSetup
.Zoom = False
.PrintArea = "$A$6:$L$25"
.Orientation = xlPortrait
.Zoom = 75
.CenterHeader = "&""Comic Sans MS""&16""&I" & "Inventurwerte - A"""
End With
End With
With .Worksheets("B")
Call prcRahmenSetzen(rngBereich:=.Range("O9:O76")) 'Bereich anpassen !
With .PageSetup
.Zoom = False
.PrintArea = "$A$6:$O$76"
.Orientation = xlPortrait
.Zoom = 78
.CenterHeader = "&""Comic Sans MS""&16""&I" & "Inventurwerte - B"""
End With
End With
End With
Application.ScreenUpdating = True
'zu druckende Blätter gruppieren
ThisWorkbook.Sheets(Array("A", "B")).Select
Application.Dialogs(xlDialogPrint).Show
'Gruppierung wieder aufheben
ThisWorkbook.Sheets("A").Select
'Rahmenlinie Entfernen, und reguläre wieder Rahmenlinien einfügen
'hier müssen dann bei den einzelnen Blättern die gleichen Bereiche _
eingetragen werden wie beim Setzen der Rahmen
Application.ScreenUpdating = False
With ThisWorkbook
Call prcRahmenZurueckSetzen(rngBereich:=.Sheets("A").Range("L9:L211"))
Call prcRahmenZurueckSetzen(rngBereich:=.Sheets("B").Range("O9:O76"))
'hier dann für die anderen Blätter Zeilen kopieren/anpassen
End With
Application.ScreenUpdating = True
End Sub
Sub prcRahmenSetzen(rngBereich As Range)
'Rahmen im Zellbereich vor dem Drucken formatieren
'Rahmenlinie einfügen
With rngBereich
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
With .Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlMedium
End With
End With
End Sub
Sub prcRahmenZurueckSetzen(rngBereich As Range)
'Rahmen im Zellbereich nach dem Drucken formatieren
'Rahmenlinie Entfernen, und reguläre Rahmenlinien einfügen
With rngBereich
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
With .Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlHairline
End With
With .Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlMedium
End With
With .Borders(xlEdgeBottom)
.LineStyle = xlDouble
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThick
End With
With .Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlHairline
End With
.Borders(xlInsideVertical).LineStyle = xlNone
With .Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlHairline
End With
End With
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Mehrere Tabellenblätter in Excel mit VBA drucken


Schritt-für-Schritt-Anleitung

Um mehrere Tabellenblätter in Excel mit VBA zu drucken, kannst du das folgende Makro verwenden. Dieses Beispiel zeigt, wie du die Druckbereiche für unterschiedliche Arbeitsblätter einrichten und anschließend drucken kannst.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (DeinDateiname)" > Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:
Sub DruckeMehrereTabellenblaetter()
    Application.ScreenUpdating = False

    ' Druckbereich und Kopfzeile für Blatt A festlegen
    With ThisWorkbook.Worksheets("A").PageSetup
        .Zoom = False
        .PrintArea = "$A$6:$L$25"
        .Orientation = xlPortrait
        .Zoom = 75
        .CenterHeader = "&""Comic Sans MS""&16""&I" & "Inventurwerte - A"""
    End With

    ' Druckbereich und Kopfzeile für Blatt B festlegen
    With ThisWorkbook.Worksheets("B").PageSetup
        .Zoom = False
        .PrintArea = "$A$6:$O$76"
        .Orientation = xlPortrait
        .Zoom = 78
        .CenterHeader = "&""Comic Sans MS""&16""&I" & "Inventurwerte - B"""
    End With

    ' Zu druckende Blätter gruppieren
    ThisWorkbook.Sheets(Array("A", "B")).Select
    Application.Dialogs(xlDialogPrint).Show
    ' Gruppierung wieder aufheben
    ThisWorkbook.Sheets("A").Select

    Application.ScreenUpdating = True
End Sub
  1. Schließe den VBA-Editor und führe das Makro aus.

Häufige Fehler und Lösungen

  • Fehler: "Das angegebene Blatt existiert nicht."

    • Stelle sicher, dass die Blattnamen in deinem Code exakt mit den Namen in Excel übereinstimmen.
  • Fehler: "Druckbereich nicht definiert."

    • Überprüfe, ob der Druckbereich für jedes Blatt korrekt eingestellt ist.
  • Lösung: Drucken mehrerer Blätter auf einer Seite

    • Um mehrere Blätter auf einer Seite zu drucken, kannst du die Option "Mehrere Seiten pro Blatt" in den Druckeinstellungen wählen.

Alternative Methoden

  • Excel mehrere Tabellenblätter drucken mit einem Button:

    • Du kannst das obige Makro an einen Button auf deinem Excel-Blatt binden, damit du mit einem Klick drucken kannst.
  • Excel alle Tabellenblätter drucken:

    • Um alle Tabellenblätter zu drucken, kannst du die Schleife For Each verwenden und die Blätter nacheinander drucken.
Sub AlleTabellenblaetterDrucken()
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        ws.PrintOut
    Next ws
End Sub

Praktische Beispiele

Hier sind einige Beispiele für Makros, die für spezifische Anforderungen angepasst werden können:

  1. Druckbereich für alle Arbeitsblätter festlegen:
Sub DruckbereichFestlegen()
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        ws.PageSetup.PrintArea = "$A$1:$B$10" ' Anpassen je nach Bedarf
    Next ws
End Sub
  1. Drucken von bestimmten Tabellenblättern:
Sub BestimmteTabellenblaetterDrucken()
    ThisWorkbook.Sheets(Array("A", "C")).Select
    Application.Dialogs(xlDialogPrint).Show
    ThisWorkbook.Sheets("A").Select
End Sub

Tipps für Profis

  • Verwende Application.ScreenUpdating = False, um die Performance zu verbessern, wenn dein Makro viele Änderungen vornimmt.
  • Wenn du die Rahmenlinien für Druckbereiche anpassen möchtest, kannst du separate Subroutinen für das Setzen und Zurücksetzen von Rahmenlinien erstellen.
  • Nutze Variablen, um den Druckbereich dynamisch festzulegen, insbesondere wenn sich die Bereiche von Blatt zu Blatt unterscheiden.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Blätter auf einer Seite drucken?
Du kannst in den Druckeinstellungen die Option "Mehrere Seiten pro Blatt" auswählen oder den PrintOut-Befehl mit entsprechenden Optionen im VBA verwenden.

2. Was ist der Unterschied zwischen PrintArea und PrintOut?
PrintArea legt fest, welcher Bereich eines Arbeitsblatts gedruckt wird, während PrintOut den Druckbefehl an sich ausführt.

3. Wie entferne ich den Druckbereich?
Um den Druckbereich in Excel zu entfernen, kannst du ActiveSheet.PageSetup.PrintArea = False verwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige