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

ActiveSheet.PageSetup.FitToPages

Forumthread: ActiveSheet.PageSetup.FitToPages

ActiveSheet.PageSetup.FitToPages
07.06.2007 16:19:46
Klaus
Hallo VBA-ler!
Ich habe mit folgenden Code gebastelt, um eine Exeltabelle ohne Formeln und Verknüpfungen in ausdruckbare bzw. verschickbare Form zu bringen.
Dazu blende ich zunächst alle unrelevanten Teile aus und kopiere die noch sichtbaren in eine neue Tabelle.
Soweit klappt das auch. Probleme:
- Der Ausdruck soll immer auf einer Seite erfolgen. Der Makrorekorder hat mir "PageSetup.FitToPages" rausgeworfen, aber das will im Makro nicht mehr funktionieren.
- Der Druckbereich steigt mit 1004 aus: "Die PrintArea-Eigenschaft des PageSetup-Objektes kann nicht festgelegt werden.
Wenn mir jemand die entsprechenden Codezeilen anpassen könnte, das währ ganz toll!
Hier ist der gesamte Code:

Sub PG_Druck()
Application.ScreenUpdating = False
Dim r As Range
Dim lColI As Integer
Dim lRowI As Integer
Dim PrintThis As String
With Sheets("PG-Plan")
For Each r In .Range("M1:AV1")
If r.Value = 0 Then r.EntireColumn.Hidden = True
Next 'r
.Range("C3:AV158").SpecialCells(xlCellTypeVisible).Copy
.Range("M1:AV1").EntireColumn.Hidden = False
End With
Workbooks.Add
'Focus auf neuem Workbook
Range("A1").PasteSpecial                             'Inhalte mit Formaten kopieren
Range("A1").PasteSpecial Paste:=xlValues  'Inhalte als Text in bestehende Formate kopieren
Application.CutCopyMode = False                 'Ameisen
Columns("A:A").ColumnWidth = 13
Columns("B:IV").ColumnWidth = 7
lColI = Range("IV5").End(xlToLeft).Column
lRowI = Range("A65535").End(xlUp).Row
PrintThis = "A1:" & Chr(64 + lColI) & lRowI
With ActiveSheet.PageSetup
'.PrintArea = Range(PrintThis)  !!!! funktioniert nicht
.PrintGridlines = True
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlLandscape
'.FitToPagesWide = 1                !!!! funktioniert nicht
'.FitToPagesTall = 1                   !!!! funktioniert nicht
End With
Application.ScreenUpdating = True
End Sub


Vielen Dank im vorraus, Forum!
Grüße,
Klaus M.vdT.

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ActiveSheet.PageSetup.FitToPages
07.06.2007 17:19:32
Ramses
Hallo
probier mal
Option Explicit

Sub test()
With ActiveSheet.PageSetup
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
End Sub


Gruss Rainer

AW: ActiveSheet.PageSetup.FitToPages
07.06.2007 17:51:00
Klaus
Hallo Rainer,
Hallo Daniel,
das ich den Druckbereich hier nicht brauche ist natürlich richtig. Ich hatte nur "definiere den Druckbereich" im Hinterkopf und habe gar nicht darüber nachgedacht, dass eh alles gedruckt werden sollte. *BrettVorKopf*
Das ich den Druckbereich nicht zwingend mit "Range", sondern auch mit "Cells" definieren kann merke ich mir aber fürs nächste mal!
Mit Zoom = False funktioniert plötzlich das FitToPage. Es ist mir allerdings unerklärlich, warum das so ist! Erstmal vielen Dank für diese Lösung.
Grüße an beide,
Klaus M.vdT.

Anzeige
AW: ActiveSheet.PageSetup.FitToPages
07.06.2007 18:29:00
Daniel
Eigentlich logisch, daß Zoom nicht gesetzt werden darf.
wenn du maximale Ausdrucksgrösse und den Zoom gleichzeitig fest vorgibst, wie soll Excel dann entscheiden, welcher Wert gilt?
also muß einer der beiden Grössen offen sein.
Gruß, Daniel

AW: ActiveSheet.PageSetup.FitToPages
08.06.2007 10:56:00
Klaus
Hallo Daniel,
danke für die Erklärung.
Gruß,
Klaus M.vdT.

Anzeige
AW: ActiveSheet.PageSetup.FitToPages
07.06.2007 17:20:00
Daniel
Hallo
da du eh nur die Zeilen in das neue Workbook kopierst, die auch gedruckt werden sollen, brauchst du den Druckbereich nicht vorgeben, sondern kannst ihn auf automatisch lassen.
d.h. du kannst die Zeile mit: .PrintArea = Range(PrintThis)
ganz weglassen, dann sollte das ganze funktionieren.
das Problem ist allerdings diese Zeile (die du dann natürlich auch nicht brauchst)

PrintThis = "A1:" & Chr(64 + lColI) & lRowI


wenn dein Druckbreich grösser als 26 Spalten ist, (bspw 27) müsste PrintThis = "A1:AA100" sein.
Tatsächlich ist es aber: "A1:[100", und damit für die .PageSetup-Funktion nicht mehr interpretierbar.
(chr(101) = "[")
Eine Lösung wäre folgender Code:


PrintThis: = range(cells(1,1), cells(lRowI,lColI)).address


aber wie gesagt, das brauchst du nicht, da dein neues Workbook ja eh nur das enthalten sollte, was auch gedruckt werden soll.
Gruß, Daniel

Anzeige
;
Anzeige

Infobox / Tutorial

ActiveSheet.PageSetup.FitToPages in Excel VBA


Schritt-für-Schritt-Anleitung

Um die ActiveSheet.PageSetup.FitToPages-Eigenschaft in deinem VBA-Skript korrekt zu verwenden, folge diesen Schritten:

  1. Starte ein neues Makro und aktiviere die Bildschirmaktualisierung:

    Sub PG_Druck()
    Application.ScreenUpdating = False
  2. Verstecke irrelevante Spalten und kopiere die sichtbaren Daten:

    Dim r As Range
    With Sheets("PG-Plan")
       For Each r In .Range("M1:AV1")
           If r.Value = 0 Then r.EntireColumn.Hidden = True
       Next r
       .Range("C3:AV158").SpecialCells(xlCellTypeVisible).Copy
    End With
  3. Erstelle ein neues Workbook und füge die kopierten Daten ein:

    Workbooks.Add
    Range("A1").PasteSpecial Paste:=xlValues
  4. Setze die Seitenlayout-Einstellungen:

    With ActiveSheet.PageSetup
       .PrintGridlines = True
       .CenterHorizontally = True
       .CenterVertically = True
       .Orientation = xlLandscape
       .FitToPagesWide = 1
       .FitToPagesTall = 1
    End With
  5. Aktiviere die Bildschirmaktualisierung wieder:

    Application.ScreenUpdating = True
    End Sub

Häufige Fehler und Lösungen

  • Fehler: "Die PrintArea-Eigenschaft des PageSetup-Objektes kann nicht festgelegt werden."

    • Lösung: Entferne die Zeile, in der PrintArea festgelegt wird, da sie in diesem Fall nicht notwendig ist.
  • Fehler: FitToPagesWide und FitToPagesTall funktionieren nicht.

    • Lösung: Stelle sicher, dass .Zoom auf False gesetzt ist, da Excel nicht gleichzeitig die Zoomstufe und die Anpassung an Seitenhöhe/-breite berücksichtigen kann.

Alternative Methoden

Wenn du eine andere Methode zur Anpassung der Seitenlayout-Einstellungen benötigst, kannst du die Pagesetup-Objekte direkt verwenden:

With ActiveSheet.PageSetup
    .Zoom = False
    .FitToPagesWide = 1
    .FitToPagesTall = 1
End With

Diese Methode ist besonders nützlich, wenn du die Sichtbarkeit bestimmter Seitenbereiche steuern möchtest.


Praktische Beispiele

Hier ist ein praktisches Beispiel, das die Verwendung von ActiveSheet.PageSetup veranschaulicht:

Sub BeispielDruck()
    With ActiveSheet.PageSetup
        .PrintArea = "A1:D20"  ' Definiert den Druckbereich
        .Orientation = xlPortrait
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    End With
End Sub

In diesem Beispiel wird ein spezifischer Druckbereich definiert und auf eine Seite angepasst.


Tipps für Profis

  • Verwendung von Cells zur Definition des Druckbereichs: Statt Range(PrintThis) kannst du Range(Cells(1, 1), Cells(lRowI, lColI)).Address verwenden, um sicherzustellen, dass der Druckbereich korrekt definiert wird, insbesondere wenn mehr als 26 Spalten involviert sind.

  • Automatisierung von Druckeinstellungen: Du kannst Makros erstellen, die automatisch die gewünschten Druckeinstellungen für verschiedene Arbeitsblätter in deiner Arbeitsmappe anwenden.


FAQ: Häufige Fragen

1. Warum funktioniert die PrintArea-Eigenschaft nicht? Die PrintArea-Eigenschaft ist nicht erforderlich, wenn du nur die sichtbaren Zellen drucken möchtest. Lass diese Zeile einfach weg.

2. Warum muss ich .Zoom auf False setzen? Wenn du .Zoom auf True setzt, kann Excel nicht entscheiden, ob die Seite vergrößert oder auf eine bestimmte Anzahl von Seiten angepasst werden soll. Daher muss einer der beiden Werte offen bleiben.

3. Wie kann ich die Druckeinstellungen für mehrere Arbeitsblätter gleichzeitig anpassen? Du kannst eine Schleife verwenden, um durch alle Arbeitsblätter zu iterieren und die PageSetup-Einstellungen in jedem Blatt anzupassen.

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