3.4k Aufrufe
Gefragt in Tabellenkalkulation von tomschi Mitglied (879 Punkte)
Halli Hallo!

Beim Drucken von Blättern mit manuellen Seitenumbrüchen, bei denen Gruppierungen vorhanden sind, habe ich immer wieder Probleme, die mir vielleicht jemand aus dem Forum beantworten kann.
siehe auch Musterdatei unter www.file-upload.net/download-8205163/Druckproblem_Seitenumbruch.xls.html

Die (Leer)seiten von gruppieren Bereichen werden trotzdem angedruckt.
Wie könnte man dies (per VBA?) verhindern?

Ciao

Tom

12 Antworten

0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo Tom,

Eine Möglichkeit:

>Seitenansicht
>Seitenumbruchvorschau
>selektiere einzeln Test1, Test2, Test3 (gedrückte STRG Taste)
>Kontextmenü
>Druckbereich festlegen
>Drucken
>Vorschau
> es werden nur die Seiten 1, 3 und 5 zum Druck angeboten

Leider erzeugt ein Seitenumbruch eine zu druckende Seite, egal ob was drinnen steht oder nicht, dieses Problem gibt es auch in WORD.

Natürlich wäre hier die Umsetzung mittels Makro erstrebenswert, dafür greifen jedoch meine VBA-Kenntnisse zu kurz.

Gruß

Paul1

Excel 2003
0 Punkte
Beantwortet von tomschi Mitglied (879 Punkte)
Guten Morgen Paul1!

Danke für Deinen Tipp!
Das Originaldokument hat zig Seiten, sodass bei jedem (individuellen) Ausdruck das "Prozedere" zu umständlich ist.
Vielleicht gibt es ja noch einen anderen Lösungsansatz, der Dir und mir bis dato unbekannt ist.

Ciao

Tom
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Tom,

hier gab es schon mal eine Anfrage mit gleichem Inhalt.

Probier mal das folgende Makro aus meiner Antwort 16 (gehört in ein allgemeines Modul) aus:

Sub Drucken_neu()

Dim a, az, i As Integer
Dim Seitenwechsel() As Integer

'Anzahl der Seitenwechsel auf dem Blatt ermitteln
az = ActiveSheet.HPageBreaks.Count

'Array für Seitenwechsel neu dimensionieren
ReDim Preserve Seitenwechsel(1 To az, 2)

'Seitenwechsel werden eingelesen
For i = 1 To az
Seitenwechsel(i, 1) = ActiveSheet.HPageBreaks(i).Location.Row

If Rows(ActiveSheet.HPageBreaks(i).Location.Row - 1).EntireRow.Hidden = True Then
Seitenwechsel(i, 2) = 0 'Marker für Seitenwechsel im ausgeblendeten Bereich
Else
Seitenwechsel(i, 2) = 1 'Marker für Seitenwechsel im eingeblendeten Bereich
End If

Next i

'Alle Seitenwechsel zurücksetzen
ActiveSheet.ResetAllPageBreaks

'Seitenwechsel im eingeblendeten Bereich setzen
For i = 1 To az
If Seitenwechsel(i, 2) = 1 Then ActiveSheet.Rows(Seitenwechsel(i, 1)).PageBreak = xlPageBreakManual
Next i

'Seite drucken
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

'Seitenwechsel im ausgeblendeten Bereich setzen
For i = 1 To az
If Seitenwechsel(i, 2) = 0 Then ActiveSheet.Rows(Seitenwechsel(i, 1)).PageBreak = xlPageBreakManual
Next i

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von tomschi Mitglied (879 Punkte)
Guten Morgen M.O.!

Was genau Dein Code macht entzieht sich meinen spärlichen VBA-Kenntnissen, aber es funktioniert anscheinend und ich bin Dir sehr, sehr dankbar für Deine Unterstützung!

Ciao

Tom
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Tom,

freut mich, dass der Code so funktioniert, wie du willst.

Wie Paul bereits ausgeführt hat, sind die Seitenwechsel das Problem. Das Makro liest daher alle Seitenwechsel aus und prüft dabei, ob vor dem Seitenwechsel Zeilen ausgeblendet sind (das wird alles in einem Array gespeichert). Dann werden alle Seitenümbrüche zurückgesetzt, die Seitenumbrüche im sichtbaren Bereich gesetzt, der Ausdruck gestartet und dann auch wieder die Seitenumbrüche im ausgeblendeten Bereich gesetzt.

Gruß

M.O.
0 Punkte
Beantwortet von tomschi Mitglied (879 Punkte)
Hallo M.O.!

Das klingt bei Dir so einfach, aber auf eine derartige Lösung wäre ich nie gekommen.
Nochmals herzlichen Dank!

Ciao

Tom
0 Punkte
Beantwortet von tomschi Mitglied (879 Punkte)
Hallo M.O.!

Folgendes ist mir noch aufgefallen.
In meiner Originaldatei ist die Skalierung vor dem Makrostart 95% festgelegt.
Nach dem Makrostart ist dort 100% Normalgröße zu lesen.
Welcher Code-Teil könnte dafür verantwortlich sein?

Ciao

Tom
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Tom,

das hängt mit dem Aufheben des Seitenumbruchs zusammen (ist mir bisher nie aufgefallen).
Hier der geänderte Code, damit wird die Skalierung wieder auf 95% gesetzt:

Sub Drucken_neu()

Dim a, az, i As Integer
Dim Seitenwechsel() As Integer

'Anzahl der Seitenwechsel auf dem Blatt ermitteln
az = ActiveSheet.HPageBreaks.Count

'Array für Seitenwechsel neu dimensionieren
ReDim Preserve Seitenwechsel(1 To az, 2)

'Seitenwechsel werden eingelesen
For i = 1 To az
Seitenwechsel(i, 1) = ActiveSheet.HPageBreaks(i).Location.Row

If Rows(ActiveSheet.HPageBreaks(i).Location.Row - 1).EntireRow.Hidden = True Then
Seitenwechsel(i, 2) = 0 'Marker für Seitenwechsel im ausgeblendeten Bereich
Else
Seitenwechsel(i, 2) = 1 'Marker für Seitenwechsel im eingeblendeten Bereich
End If

Next i

'Alle Seitenwechsel zurücksetzen und Skalierung auf 95% setzen
With ActiveSheet
.ResetAllPageBreaks
.PageSetup.Zoom = 95
End With
'Seitenwechsel im eingeblendeten Bereich setzen
For i = 1 To az
If Seitenwechsel(i, 2) = 1 Then ActiveSheet.Rows(Seitenwechsel(i, 1)).PageBreak = xlPageBreakManual
Next i

'Seite drucken
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

'Seitenwechsel im ausgeblendeten Bereich setzen
For i = 1 To az
If Seitenwechsel(i, 2) = 0 Then ActiveSheet.Rows(Seitenwechsel(i, 1)).PageBreak = xlPageBreakManual
Next i

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo M.O.,

diese Deine Lösung ist einzigartig – gratuliere!

Ich habe im Vorfeld auch in eigenem Interesse das Web nach einer Lösung durchforstet und wurde auch nicht nur annähernd fündig.

Gruß

Paul1

P.S.
schöne Grüße auch an @Tom
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Paul1,

vielen Dank für die Blumen :-).

Gruß

M.O.
...