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
|
|
|
|
Die im Download befindliche *.bas-Datei kann in Excel im VB-Editor importiert werden.
|
|