Tipp 0323 Seitenanzahl (Druckseiten) ermitteln
Autor/Einsender:
Datum:
  Angie
02.04.2003
Entwicklungsumgebung:   Excel 97
Mit Hilfe der Eigenschaften HPageBreaks und VPageBreaks, mit denen die Anzahl der horizontalen/vertikalen Seitenwechsel in einem Tabellenblatt (nicht Diagrammblatt) ermittelt werden kann, lässt sich durchaus per VBA die Anzahl der Druckseiten berechnen.

1. Seitenanzahl aktive Arbeitsmappe/aktives Tabellenblatt ermitteln

In folgendem Beispiel wird die Anzahl der Druckseiten im ggf. aktiven Tabellenblatt mit den Eigenschaften HPageBreaks und VPageBreaks ermittelt.
 
Public Sub GetNumberOfPagesWithVBA()
  Dim nHBreaks As Integer
  Dim nVBreaks As Integer
  Dim nHPages As Integer
  Dim nVPages As Integer
  Dim nPagesTot As Integer

  If TypeName(ActiveWorkbook.ActiveSheet) = "Worksheet" Then
    With ActiveWorkbook.ActiveSheet
      nHBreaks = .HPageBreaks.Count
      nHPages = nHBreaks + 1
      nVBreaks = .VPageBreaks.Count
      nVPages = nVBreaks + 1
      nPagesTot = nHPages * nVPages
    End With
    MsgBox nPagesTot
  Else
    MsgBox "Das aktive Blatt ist kein Tabellenblatt!", _
          vbOKOnly + vbInformation
  End If
End Sub
 

2. Seitenanzahl aktive Arbeitsmappe/aktives Blatt mit Excel 4.0-Makrofunktion ermitteln

Als Gegenüberstellung zeigt das 2. Beispiel, wie die Seitenanzahl des aktiven Blatts aber auch mit einer einzigen Zeile Code ermittelt werden kann. Dies geschieht mit der Microsoft Excel 4.0- Makrofunktion GET.DOCUMENT. Die Abfrage, ob es sich bei dem aktiven Blatt um ein Tabellenblatt handelt, ist hier nicht erforderlich, da, wenn es sich um ein Diagrammblatt handelt, 1 zurückgegeben wird.
 
Public Sub GetNumberOfPagesWithXLM()
  MsgBox ExecuteExcel4Macro("Get.Document(50)")
End Sub
 
Wie aus den beiden obigen Beispielen hervorgeht geht, ist es unschwer zu erkennen, welche Vorteile die Excel 4.0- Makrofunktion GET.DOCUMENT hat. Daher wird in den weiteren Beispielen nur auf die Verwendung der Excel 4.0-Makrofunktion zur Ermittlung der Anzahl der Druckseiten eingegangen.
Im 2. Beispiel wird also die Seitenanzahl des aktiven Blatts in der aktiven Arbeitsmappe ermittelt. Um die Seitenanzahl eines nichtaktiven Blatts der aktiven Arbeitsmappe ermitteln zu können, müsste man entweder das Blatt mit der Activate-Methode aktivieren oder aber obige Codezeile mit dem Namen des Blatts ergänzen, was dann z. B. so aussähe:
 
MsgBox ExecuteExcel4Macro("Get.Document(50,""Tabelle1"")")
 
Natürlich ist es auch möglich, den Namen einer offenen Arbeitsmappe inkl. Blattname zu übergeben. Damit lässt sich dann die Anzahl der Druckseiten im angegebenen Blatt in der angegebenen Arbeitsmappe ermitteln, ohne die Arbeitsmappe und das Blatt aktivieren zu müssen:
 
MsgBox ExecuteExcel4Macro("Get.Document(50," & _
      """[Mappe1.xls]Tabelle1"")")
 
Um die Flexibilität zu wahren, ist es weder sinnvoll noch notwendig den Namen einer Arbeitsmappe und/oder Blatts, wie oben geschehen, "hard-coded" im Code zu integrieren. Siehe dazu die folgenden Beispiele.

3. Seitenanzahl angegebene Arbeitsmappe/ausgewählte Blätter ermitteln

Mit der folgenden Funktion wird die Gesamtseitenanzahl der ausgewählten Blätter in der angegebenen Arbeitsmappe ermittelt. Bei der Auswahl kann es sich um ein einzelnes Blatt (Tabellenblatt oder Diagrammblatt) oder aber auch um mehrere Blätter handeln.
 
Public Function NumberOfPagesSelectedSheets( _
      ByVal WB As Workbook) As Integer
  Dim nPagesTot As Integer
  Dim nPagesSht As Integer

  Dim sh As Object

  Dim strWBName As String
  Dim strSheetName As String

  strWBName = "[" & WB.Name & "]"

  nPagesTot = 0
  For Each sh In Workbooks(WB.Name).Windows(1).SelectedSheets
    strSheetName = strWBName & sh.Name
    nPagesSht = ExecuteExcel4Macro("Get.Document(50," & _
                  """" & strSheetName & """" & ")")
    nPagesTot = nPagesTot + nPagesSht
  Next sh
  NumberOfPagesSelectedSheets = nPagesTot
End Function

Public Sub GetNumberOfPagesSelectedSheets()
'Beispiel-Aufrufe:
  MsgBox NumberOfPagesSelectedSheets(ActiveWorkbook)
  MsgBox NumberOfPagesSelectedSheets(Workbooks("Mappe1.xls"))
End Sub
 

4. Seitenanzahl angegebene Arbeitsmappe/alle Blätter ermitteln

Möchte man die Gesamtanzahl der Druckseiten aller in der angegebenen Arbeitsmappe vorhandenen Blätter (Tabellen- und Diagrammblätter) ermitteln, so kann man folgende Funktion einsetzen.
 
Public Function NumberOfAllPagesInWB(ByVal WB As Workbook) _
      As Integer
  Dim nPagesTot As Integer
  Dim nPagesSht As Integer

  Dim sh As Object

  Dim strWBName As String
  Dim strSheetName As String

  strWBName = "[" & WB.Name & "]"

  nPagesTot = 0
  For Each sh In WB.Sheets
    strSheetName = strWBName & sh.Name
    nPagesSht = ExecuteExcel4Macro("Get.Document(50," & _
                  """" & strSheetName & """" & ")")
    nPagesTot = nPagesTot + nPagesSht
  Next sh
  NumberOfAllPagesInWB = nPagesTot
End Function

Public Sub GetNumberOfAllPagesInWB()
'Beispiel-Aufrufe:
  MsgBox NumberOfAllPagesInWB(ActiveWorkbook)
  MsgBox NumberOfAllPagesInWB(Workbooks("Mappe1.xls"))
End Sub
 

5. Seitenanzahl angegebene Arbeitsmappe/alle Tabellenblätter ermitteln

Bei dieser Gelegenheit möchte ich auf den Unterschied zwischen Blätter (Sheets) und Tabellenblätter (Worksheet-Objekte) hinweisen:
Die Sheets-Auflistung enthält alle Blätter der Arbeitsmappe, also sowohl Tabellenblätter (Worksheet-Objekte) als auch Diagrammblätter (Chart-Objekte, nicht zu verwechseln mit dem ChartObject!). Die Worksheets-Auflistung dagegen enthält nur die Tabellenblätter in der angegebenen bzw. aktiven Arbeitsmappe.
Sollen bei der Ermittlung der Gesamtsumme der Druckseiten nur die Tabellenblätter (Worksheet-Objekte) berücksichtigt werden, so kann man einfach die Sheets-Auflistung mit der Worksheets-Eigenschaft einschränken.
 
Public Function NumberOfPagesInWB(ByVal WB As Workbook) _
      As Integer
  Dim nPagesTot As Integer
  Dim nPagesSht As Integer

  Dim sh As Worksheet

  Dim strWBName As String
  Dim strSheetName As String

  strWBName = "[" & WB.Name & "]"

  nPagesTot = 0
  For Each sh In WB.Worksheets
    strSheetName = strWBName & sh.Name
    nPagesSht = ExecuteExcel4Macro("Get.Document(50," & _
                  """" & strSheetName & """" & ")")
    nPagesTot = nPagesTot + nPagesSht
  Next sh
  NumberOfPagesInWB = nPagesTot
End Function

Public Sub GetNumberOfPagesInWB()
'Beispiel-Aufrufe:
  MsgBox NumberOfPagesInWB(ActiveWorkbook)
  MsgBox NumberOfPagesInWB(Workbooks("Mappe1.xls"))
End Sub
 
Hinweis
Die im Download befindliche *.bas-Datei kann in Excel im VB-Editor importiert werden.

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
Excel-Version
95
97
2000
2002 (XP)
2003
2007
2010


Download  (2,2 kB) Downloads bisher: [ 996 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Samstag, 9. Juli 2011