Seitenanzahl per VBA ermitteln?

Moin,

gibt es eine Möglichkeit, die (Druck-)Seitenanzahl eines Dokuments per VBA zu ermitteln? Hintergrund ist ein Inhaltsverzeichnis, das erstellt werden soll.

Die Namen der Blätter aufzulisten, ist ja trivial, und wenn jedes Blatt nur eine Seite hätte, wäre das auch trivial. Wenn man manuelle Seitenumbrüche oder Druckbereiche hätte, wäre das vielleicht in bestimmten Fällen auch noch nicht so schwer rauszufindnen, aber Worst Case wäre wohl wenn kein Druckbereich definiert ist und der Inhalt beliebig sein kann. Dann hängt´s nämlich noch vom Druckertreiber ab,

Gibt´s da was? Wenn ja, wäre ich für (mit)geteilte Erkenntnisse dankbar.

Viele Grüße,
Kristian

Hi Kristian,

gibt es eine Möglichkeit, die (Druck-)Seitenanzahl eines
Dokuments per VBA zu ermitteln? Hintergrund ist ein

ja, das geht, ich weiß nur grad nicht wie :smile: Zur Not muß man ein Excel4makro ausbuddeln, damit geht das sicher.

Wenn man manuelle Seitenumbrüche oder Druckbereiche hätte, wäre das
vielleicht in bestimmten Fällen auch noch nicht so schwer
rauszufindnen

Nö, im Gegensatz zu Word wehrt sich Excel sehr dagegen etwas preiszugeben wenn man wissen will auf welcher Druckseite Zelle A345 erscheinen würde.

, aber Worst Case wäre wohl wenn kein
Druckbereich definiert ist und der Inhalt beliebig sein kann.
Dann hängt´s nämlich noch vom Druckertreiber ab,

K.A. wie sich da Excel und der Druckertreiber einigen wenn kein Druckbereich definiert wurde. Da fließt doch vieles ein, Querformat, Fettdruck, Schriftgröße, Spaltenbreite usw.

Gruß
Reinhard

Hi Kristian,
für was gibts google :smile:

Sub DruckseitenAnzahl()
Dim SZ&
SZ = ExecuteExcel4Macro(„Get.Document(50)“)
MsgBox "Anzahl der Seiten: " & SZ
End Sub

Gruß
Reinhard

In Google hatte ich vorher auch nur das gefunden,
aber in einem anderen Zusammenhang - zumindest
schien es so. Ich hab´s mal ausprobiert, und bei
sauber definierten Druckbereichen klappt es auch
ganz gut, wie´s aussieht. Ohne Druckbereich kann
es sein, dass die Zahl daneben liegt.

Danke erstmal!
Kristian

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Kristian,

gibt es eine Möglichkeit, die (Druck-)Seitenanzahl eines
Dokuments per VBA zu ermitteln?

wenn es um Excel-Seiten geht - ja :smile:

dazu gibt es zwei Ojekte mit der Eigenschaft count
HPageBreaks - für horizontal, greift auf waagerechte Seitenumbrüche zu, also Seitenwechsel nach unten
VPageBreaks - für vertikal, greift auf vertikale Seitenumbrüche zu, also nach rechts

zum Beispiel:
Sub SeitenwechselZaehlen()
Dim Ver As Integer
Dim Hor As Integer
Ver = ActiveSheet.VPageBreaks.Count
Hor = ActiveSheet.HPageBreaks.Count
a = MsgBox(„das aktive Tabellenblatt enthält " & Str$(Ver) & " senkrechte sowie“ & Str$(Hor) & " waagerechte Seitenwechsel.", vbOKOnly, „Seitenwechselzählung“)
End Sub

Ansprechen kann man die Seitenwechsel über den dazugehöhrenden Index.
Mit HPageBreaks(1) spricht man den horizontalen Druckseitenwechsel von Seite 1 auf 2 an, mit HPageBreaks(2) den von Seite 2 auf Seite 3 usw.
VPageBreaks(1) entsprechend.

Positionbestimmung erfolgt mit:
ActiveSheet.HPageBreaks(1).Location
gibt die Zeilennummer des Seitenwechsels an

Seitenwechsel einfügen (hier vor Zeile 20) erfolgt mit der Add-Methode mit:
ActiveSheet.HPageBreaks.Add Before:=Range(„a20“)
oder
ActiveSheet.HPageBreaks.Add Before:=Cells(20,1)

die Seitenwechsel im Tabellenblatt zeigt man an mit:
ActiveSheet.DisplayAutomaticPageBreaks = True (bzw False)

die Seitenwechsel in der Seitenumbruchvorschau mit:
ActiveWindow.View = xlPageBreakPreview

wieder zurück in die Normalansicht mit:
ActiveWindow.View = xlNormalView

rauszufindnen, aber Worst Case wäre wohl wenn kein
Druckbereich definiert ist und der Inhalt beliebig sein kann.
Dann hängt´s nämlich noch vom Druckertreiber ab,

Gibt´s da was? Wenn ja, wäre ich für (mit)geteilte
Erkenntnisse dankbar.

Ja :smile:)

die Festlegung des Druckbereichs ist mit:
ActiveSheet.PageSetup.PrintArea = Range(„A1:H50“).Address

Mit dem Festlegen des Druckbereiches wird ein vorher bereits eingestellte Druckbereich aufgehoben (weil überschrieben), geht auch mit „… PrintArea = Empty

eine bestimmte Seite ausdrucken (z. Bsp. die Seiten 4 und 5):
ActiveSheet.PrintOut From:=4, To:=5

Das wär’s erstmal was mir dazu einfällt. Ein Thema wär vielleicht noch die Seitenanpassung, könnte man vielleicht über eine Schleife machen, bis VPageBreaks.Count>0 falsch ist ,dann mit:
.PageSetup.Zoom=.PageSetup.Zoom-1

Hofffe, es hilft dir ein wenig weiter.

Gru
Marion

Hallo Marion
Ich meinte, ich kenne Excel-VBA einigermassen. Nun hast du mir jedoch ein ganz neues Licht (eh… Stern) aufgesteckt.
Danke
Erich

Hi Marion,

danke für die ausführliche Antwort. Werde mir das mal angucken. Diese beiden Eigenschaften waren mir bei der Suche in der Hilfe irgendwie durch die Lappen gegangen. Sieht erstmal ganz geeignet aus - mal gucken, was die Realität sagt :wink:

Schönes Wochenende,
Kristian