Kurzfassung —
PrintOutschickt 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 mitPreview:=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
PrintOuttatsä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
ActivePrinterwählen und den alten wiederherstellen - Die Abwägung:
PrintOutfü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
