🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA PrintOut in Excel — Blätter, Bereiche und Kopien per Makro drucken

|

VBA PrintOut in Excel — Blätter, Bereiche und Kopien per Makro drucken

Kurzfassung — PrintOut schickt Seiten an einen Drucker. Sie rufen es für ein Blatt, einen Bereich, eine Gruppe von Blättern oder eine Arbeitsmappe auf und geben über benannte Argumente an, was Sie brauchen: Copies, From/To, Preview, Collate. Gedruckt werden die Seiten, die Ihr Page Setup festlegt — richten Sie also zuerst die Seite ein. Solange Sie am Makro bauen, drucken Sie mit Preview:=True. Und wenn das Ziel eine Datei statt Papier ist, drucken Sie gar nicht — exportieren Sie als PDF.

Sub PrintInvoices()
    With ThisWorkbook.Worksheets("Invoice")
        .PageSetup.PrintArea = "$A$1:$G$45"
        .PrintOut Copies:=2, Collate:=True, Preview:=False
    End With
End Sub

Dies ist das Papierende eines dreiteiligen Themenblocks darüber, wie Ergebnisse aus Excel herauskommen. Page Setup legt fest, was eine Seite ist. PrintOut, um das es hier geht, schickt diese Seiten an einen Drucker. ExportAsFixedFormat schickt dieselben Seiten in eine PDF-Datei. Weil beide Ausgaben aus derselben Seitendefinition lesen, sind die meisten Probleme der Art „mein Ausdruck stimmt nicht“ Seitenprobleme — und die werden behoben, bevor diese Zeile überhaupt läuft.

Was Sie lernen

  • Was PrintOut tatsächlich druckt und woher die Seite kommt
  • Die Argumente, die Sie kennen sollten: Kopien, Seitenbereiche, Vorschau, Sortieren
  • Ein Blatt, einen Bereich, mehrere Blätter oder eine ganze Arbeitsmappe drucken
  • Testen, ohne Papier zu verschwenden
  • Einen Drucker mit ActivePrinter wählen und den alten wiederherstellen
  • Die Abwägung: PrintOut für Papier, Export für Dateien

Das mentale Modell: PrintOut druckt Seiten, keine Zellen

PrintOut weiß nichts von Ihrer Tabelle. Es kennt nur Seiten: die Rechtecke, in die Excel das Blatt anhand von Druckbereich, Ausrichtung, Skalierung, Rändern und Seitenumbrüchen zerschneidet. Diese Seiten schickt es der Reihe nach an den Drucker. Wenn also eine Spalte allein auf Seite 2 landet oder am Ende eine leere Seite herauskommt, liegt die Ursache in der Seitendefinition, nicht im Druckaufruf:

  • Eine Spalte rutscht auf eine neue Seite, weil das Blatt im Hochformat bei 100 % steht.
  • Eine leere Seite erscheint, weil eine formatierte Zelle weit unterhalb der Daten den verwendeten Bereich aufbläht.
  • Der halbe Bericht fehlt, weil noch ein alter Druckbereich gesetzt ist.

Behalten Sie diese Arbeitsteilung im Kopf, dann ist der Rest einfach: Page Setup formt die Seiten, PrintOut liefert sie aus.

Die PrintOut-Argumente, auf die es ankommt

PrintOut nimmt bis zu neun Argumente. Diese werden Sie verwenden:

Argument Was es bewirkt
From, To Erste und letzte zu druckende Seite. Weglassen für alle Seiten.
Copies Anzahl der Kopien.
Collate True druckt jede Kopie vollständig in Reihenfolge (1-2-3, 1-2-3).
Preview True öffnet zuerst die Druckvorschau, statt sofort zu drucken.
ActivePrinter Der Drucker für diesen Auftrag.
IgnorePrintAreas True druckt das ganze Blatt und ignoriert den Druckbereich.

Schreiben Sie sie immer als benannte Argumente. .PrintOut 1, 2, 3 lässt sich kompilieren, aber niemand erkennt, welche Zahl die Anzahl der Kopien ist.

Ein Blatt, ein Bereich, mehrere Blätter oder die Arbeitsmappe

Das Objekt, für das Sie PrintOut aufrufen, bestimmt den Umfang:

Worksheets("Report").PrintOut                       ' ein Blatt
Worksheets("Report").Range("A1:F30").PrintOut       ' ein Bereich, Druckbereich wird ignoriert
Worksheets(Array("North", "South")).PrintOut        ' mehrere Blaetter, ein Auftrag
ThisWorkbook.PrintOut                               ' jedes sichtbare Blatt

Eine Auswahl von Blättern als einen Auftrag zu drucken ist wichtig für die Seitennummerierung und für Duplexdrucker: Die Blätter kommen als ein Dokument heraus, mit fortlaufenden Seitenzahlen, wenn die Fußzeile &P verwendet. Um jedes Blatt einzeln zu drucken, durchlaufen Sie sie mit For Each und rufen PrintOut innerhalb der Schleife auf.

Testen, ohne Papier zu verschwenden

Ein Druckmakro in der Entwicklung ist ein Aktenvernichter. Zwei Gewohnheiten verhindern das:

Worksheets("Report").PrintOut Preview:=True    ' zeigt die Vorschau; der Benutzer entscheidet
Worksheets("Report").PrintPreview              ' nur Vorschau, druckt nie von selbst

Preview:=True ist der Schalter, den Sie umlegen, wenn das Makro fertig ist: Der Code bleibt gleich, nur dieses Argument ändert sich. Noch besser: Prüfen Sie das Layout während der Arbeit per PDF-Export — er zeigt exakt die Seiten, die PrintOut schicken würde, und kostet nichts.

Einen Drucker wählen und den alten wiederherstellen

Application.ActivePrinter ist der Drucker, den Excel verwendet. Sie können ihn setzen, aber der Name muss exakt stimmen, einschließlich des Anschlusses, den Windows vergeben hat — etwa "Label Printer on Ne02:" —, und dieser Anschluss kann von Rechner zu Rechner verschieden sein. Außerdem ändert das Setzen den Drucker für alles, was der Benutzer danach druckt. Sichern Sie also den aktuellen Wert, wechseln Sie, drucken Sie und stellen Sie den alten Wert wieder her — auch wenn der Druck fehlschlägt:

Sub PrintOnLabelPrinter()
    Dim oldPrinter As String
    oldPrinter = Application.ActivePrinter
    On Error GoTo Restore
    Application.ActivePrinter = "Label Printer on Ne02:"
    Worksheets("Labels").PrintOut
Restore:
    Application.ActivePrinter = oldPrinter
    If Err.Number <> 0 Then MsgBox "Could not print: " & Err.Description
End Sub

Um den exakten Namen herauszufinden, drucken Sie einmal von Hand auf diesem Drucker und führen dann Debug.Print Application.ActivePrinter im Direktbereich aus.

Die Abwägung: Papier über PrintOut, Dateien über den Export

PrintOut hat die Argumente PrintToFile und PrToFileName, und Sie werden Code finden, der sie mit dem Drucker Microsoft Print to PDF kombiniert, um ein PDF zu erzeugen. Lassen Sie das. Es hängt an einem Druckernamen, der je nach Rechner und Windows-Sprache variiert, es kann einen Speichern-Dialog aufpoppen lassen, der ein unbeaufsichtigtes Makro einfriert, und es ändert den aktiven Drucker. ExportAsFixedFormat erzeugt dasselbe PDF ohne Drucker, ohne Dialog und ohne Nebenwirkungen. Die Regel: PrintOut ist für Papier; eine Datei ist ein Export. Und egal, welche Ausgabe Sie wählen — ihre Seiten kommen aus Page Setup. Dort wird es behoben.

Wie ExcelMaster hilft

Druckmakros gehen auf eine Weise schief, die man erst auf Papier sieht: die einsame Spalte auf Seite 2, die leere Seite am Ende, der falsche Drucker, die zwanzig Kopien, die eigentlich zwei sein sollten. Jedes davon kostet einen Neudruck, bevor überhaupt jemand in den Code schaut.

ExcelMaster lässt Sie den Auftrag beschreiben — „drucke das Rechnungsblatt zweimal, Querformat, eine Seite breit, auf dem Etikettendrucker“ — und schreibt Seiteneinrichtung und PrintOut-Aufruf zusammen, mit gesichertem und wiederhergestelltem Drucker. Sie sehen sich das Ergebnis als PDF an, bevor sich auch nur ein Blatt Papier bewegt.

Häufig gestellte Fragen

Wie drucke ich ein Blatt mit VBA?

Rufen Sie PrintOut für das Arbeitsblatt auf: Worksheets("Report").PrintOut. Ergänzen Sie benannte Argumente für das, was Sie brauchen, etwa Copies:=2 oder From:=1, To:=3. Gedruckt werden die Seiten, die die Seiteneinrichtung des Blatts festlegt — setzen Sie also zuerst Druckbereich und Ausrichtung, wenn es auf das Layout ankommt.

Wie drucke ich einen bestimmten Bereich in VBA?

Rufen Sie PrintOut für den Bereich auf: Range("A1:F30").PrintOut. Damit wird nur dieser Bereich gedruckt, ganz gleich, welcher Druckbereich für das Blatt gilt. Für einen Bereich, den Sie oft drucken, setzen Sie einmal PageSetup.PrintArea und drucken stattdessen das Blatt.

Wie zeige ich vor dem Drucken die Druckvorschau an?

Übergeben Sie Preview:=True an PrintOut; das öffnet die Druckvorschau, und der Benutzer kann drucken oder abbrechen. Um die Vorschau ganz ohne Druck anzuzeigen, rufen Sie PrintPreview für das Blatt auf. Arbeiten Sie während der Entwicklung des Makros mit der Vorschau, damit Tests kein Papier verschwenden.

Wie drucke ich in VBA auf einem bestimmten Drucker?

Setzen Sie Application.ActivePrinter auf den exakten Namen des Druckers einschließlich Anschluss, etwa "Office Printer on Ne01:", und rufen Sie dann PrintOut auf. Sichern Sie vorher den bisherigen Wert und stellen Sie ihn danach wieder her, denn die Einstellung gilt für alles, was der Benutzer als Nächstes druckt.

Kann ich mit PrintOut ein PDF erzeugen?

Das geht, mit dem Drucker Microsoft Print to PDF und PrToFileName, ist aber fragil: Druckernamen unterscheiden sich von Rechner zu Rechner, und ein Speichern-Dialog kann das Makro blockieren. Verwenden Sie stattdessen ExportAsFixedFormat Type:=xlTypePDF — das braucht keinen Drucker und nimmt den Dateipfad als Argument.

Getestet in

Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 29.09.2026.

Verwandte Anleitungen: VBA Save as PDF · VBA Page Setup · VBA Used Range · VBA For Each · VBA Workbook BeforePrint · VBA Immediate Window · VBA On Error