Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

PaperSize = xlPaperUser

Forumthread: PaperSize = xlPaperUser

PaperSize = xlPaperUser
Tim
Hallo zusammen,
ich hoffe mir kann jemand helfen... Via VBA lasse ich ein Tabellenblatt mit Werten füllen, formatieren und als pdf speichern. Soweit funktioniert das auch alles. Nun muss ich jedoch in der pdf Ausgabe das Standardformat DIN A4 verlassen und würde gerne eine benutzerdefinierte Seitengröße von 216,00 mm X 303,00 mm einstellen.
Diese umstellung würde ich gerne in vba realisieren, was meiner meinung nach auch über
Tabelle1.PageSetup.PaperSize = xlPaperUser
gehen müsste. ( oder zumindest hoffe ich das )
Mein erster "laienhafter" Versuch war
Tabelle1.PageSetup.PaperSize = xlPaperUser(216#, 303#)
aber da kommt der Fehler : Erwartete:Datenfeld.
Jemand eine Idee?
Danke und Gruß
Tim
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: PaperSize = xlPaperUser
10.07.2011 13:22:05
fcs
Hallo Tim,
die Möglichkeiten hängen von den Fähigkeiten der zur Verfügung stehenden Drucker ab.
Ggf. kann man sich aber auch einen entsprechenden Drucker einrichten, dessen Ausgabe in eine Datei umgeleitet wird, z.B. einen Postscript-Drucker oder Kopierer/Drucker.
Die Funktion "Als PDF-Speichern" in Office 2007 und neuer greift scheinbar auf die Einstellungen des aktuell eingerichteten Druckers zurück, um die PDF-Datei zu speichern.
Der Wert, der unter VBA für die Papiergröße einzugeben ist, ist abhängig vom Drucker. Ich hab mal mit "FreePDF" und "Xerox Document Centre 420 PS" experimentiert.
Da ich keinen Weg kenne via VBA direkt auf die Einstellungsdialoge zuzugreifen, hab ich für FreePDF einen eigenen Drucker eingerichtet und die Eigenschaften für die benutzerdefinierte Papiergröße angepasst.
Für den Xerox hab ich die Benutzerdefinierte Papiergröße 1 entsprechend geändert.
Nachfolgend 2 Beispiel für die beiden Drucker. Ob das Merken und erneute Setzen des momentan aktiven Druckers relevant ist muss du selber entscheiden.
Gruß
Franz
'Erstellt unter Windows Vista, Office 2007
Sub Speichern_PDF_Var1()
' Speichern_PDF Makro
Dim sActivePrinter, sFileName As String, vPaperSize, iUSB As Integer
On Error GoTo Fehler
'Name der PDF-Datei festlegen
With ActiveWorkbook
If InStrRev(.Name, ".xls") = 0 Then
'Datei wurde noch nicht gespeichert
sFileName = .Name & Format(Now, " YYYYMMDD hhmmss") & ".pdf"
Else
sFileName = Left(.Name, InStrRev(.Name, ".") - 1) & _
Format(Now, "YYYYMMDD hhmmss") & ".pdf"
End If
sFileName = "C:\Users\Public\Test\" & sFileName
End With
'Aktiven Drucker merken
sActivePrinter = Application.ActivePrinter
vPaperSize = ActiveSheet.PageSetup.PaperSize
'Zähler für Druckerport, dieser ändert sich gelegentlich, deshalb wird in einer _
Schleife hochgezählt bis kein Fehler mehr auftritt.
iUSB = 0
Drucker_Setzen:
iUSB = iUSB + 1
'"FreePDF - FreePDF_216_303" ist der FreePDF-Drucker, dessen Standardeigenschaften _
auf das gewünschte Sonderformat eingestellt wurden.
Application.ActivePrinter = "FreePDF - FreePDF_216_303 auf Ne" & Format(iUSB, "00") & ":"
With ActiveSheet.PageSetup
.PaperSize = 32767 'Wert wurde per Makrorecorder ermittelt. _
216*303 mm - Hochformat lange Seite zuerst für FreePDF
End With
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
sFileName, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True
Application.ActivePrinter = sActivePrinter
With ActiveSheet.PageSetup
.PaperSize = vPaperSize
End With
Fehler:
With Err
Select Case .Number
Case 0 'Ales OK
Case 1004 'Index-Fehler in Liste
Resume Drucker_Setzen
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
End Sub
Sub Speichern_PDF_Var2()
' Speichern_PDF Makro
Dim sActivePrinter, vPaperSize, sFileName As String, iUSB As Integer
On Error GoTo Fehler
'Name der PDF-Datei festlegen
With ActiveWorkbook
If InStrRev(.Name, ".xls") = 0 Then
'Datei wurde noch nicht gespeichert
sFileName = .Name & Format(Now, " YYYYMMDD hhmmss") & ".pdf"
Else
sFileName = Left(.Name, InStrRev(.Name, ".") - 1) & Format(Now, "YYYYMMDD hhmmss")  _
& ".pdf"
End If
sFileName = "C:\Users\Public\Test\" & sFileName
End With
'Aktiven Drucker merken
sActivePrinter = Application.ActivePrinter
vPaperSize = ActiveSheet.PageSetup.PaperSize
Application.ActivePrinter = "Xerox Document Centre 420 PS auf FILE:"
With ActiveSheet.PageSetup
.PaperSize = 24000 'Benutzerdefinierte Größe 1 - per Makrorecorder ermittelt
End With
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
sFileName, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True
Exit Sub
Application.ActivePrinter = sActivePrinter
With ActiveSheet.PageSetup
.PaperSize = vPaperSize
End With
Fehler:
With Err
Select Case .Number
Case 0 'Ales OK
Case 9999 'Dummy-Fehler
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
End Sub

Anzeige
;
Anzeige

Infobox / Tutorial

Benutzerdefinierte Papiergröße in Excel mit VBA einstellen


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle Einfügen > Modul.

  3. Makro eingeben: Füge den folgenden Code in das Modul ein, um eine benutzerdefinierte Papiergröße zu setzen:

    Sub SetCustomPaperSize()
       Dim sActivePrinter As String
       Dim sFileName As String
       Dim vPaperSize As Variant
    
       ' Aktiven Drucker merken
       sActivePrinter = Application.ActivePrinter
    
       ' Benutzerdefinierte Papiergröße setzen
       With ActiveSheet.PageSetup
           .PaperSize = xlPaperUser
           .PaperWidth = 216 ' in mm
           .PaperHeight = 303 ' in mm
       End With
    
       ' Hier kannst du den Export als PDF einfügen oder andere Funktionen nutzen
    
       ' Drucker wiederherstellen
       Application.ActivePrinter = sActivePrinter
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

  • Fehler: Erwartete: Datenfeld: Dieser Fehler tritt auf, wenn die Syntax nicht korrekt ist. Stelle sicher, dass du die Papiergröße richtig definierst. Verwende xlPaperUser anstelle einer direkten Zahlenangabe.

  • Drucker nicht gefunden: Wenn du den freepdf drucker verwendest, stelle sicher, dass dieser Drucker installiert und korrekt eingerichtet ist. Überprüfe die Druckereinstellungen unter Windows.


Alternative Methoden

Eine alternative Methode zur Nutzung von benutzerdefinierten Papiergrößen ist die Verwendung von Drucker-Einstellungen. Du kannst einen virtuellen Drucker wie FreePDF oder Xerox Document Centre nutzen, um benutzerdefinierte Formate zu speichern. Diese Drucker bieten oft zusätzliche Optionen zur Anpassung der Papiergröße.


Praktische Beispiele

Hier sind zwei Beispiele, die den Einsatz von benutzerdefinierten Papiergrößen in VBA zeigen:

  1. Beispiel 1: FreePDF Drucker

    Application.ActivePrinter = "FreePDF - FreePDF_216_303 auf Ne01:"
    With ActiveSheet.PageSetup
       .PaperSize = 32767 ' Benutzerdefinierte Größe
    End With
  2. Beispiel 2: Xerox Drucker

    Application.ActivePrinter = "Xerox Document Centre 420 PS auf FILE:"
    With ActiveSheet.PageSetup
       .PaperSize = 24000 ' Benutzerdefinierte Größe 1
    End With

Diese Beispiele verwenden pagesetup.papersize, um die Papiergröße dynamisch zu ändern.


Tipps für Profis

  • Druckereinstellungen anpassen: Bevor du das Makro ausführst, stelle sicher, dass der ausgewählte Drucker die gewünschte Papiergröße unterstützt. Passe die Druckereinstellungen an, um Probleme zu vermeiden.

  • Makros testen: Teste deine VBA-Skripte in einer sicheren Umgebung, um unerwünschte Änderungen zu vermeiden. Nutze eine Kopie deiner Datei, bevor du das Skript ausführst.


FAQ: Häufige Fragen

1. Wie kann ich die benutzerdefinierte Papiergröße in der Druckvorschau sehen? Um die benutzerdefinierte Papiergröße zu sehen, gehe zu Datei > Drucken und überprüfe die Einstellungen des gewählten Druckers.

2. Funktioniert das Makro in Office 365? Ja, die meisten VBA-Funktionen, einschließlich der Anpassung der Papiergröße mit pagesetup.papersize, funktionieren auch in Office 365. Stelle sicher, dass du die aktuelle Version verwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige