Zurück zur Homepage

Drucken mit Übertrag

Manchmal möchte man eine Tabelle ausdrucken, die auf jeder Druckseite einen Übertrag enthält. Mit Bordmitteln ist das unter XL97 nicht zu machen. Mit etwas VBA und einer Excel4 Makrofunktion ist es aber möglich, vor dem Ausdrucken der einzelnen Seiten, die Summe der einzelnen Spalten bis zum gegenwärtigen Druckblatt zu berechnen. Diese Summe kann man dann in die zweite Zeile einfügen, wenn mal beim Einrichten der Seite die ersten zwei Zeilen als Wiederholungszeilen definiert hat. In der ersten Zeile stehen dann die Überschriften, in der zweiten die Überträge.

Beispieldatei Uebertrag.zip 17 kB

 

Sub Austesten()
Dim Spalten As Long, Blatt As Worksheet
Dim Druckblatt As Long
'Druckblatt festlegen
Set Blatt = Worksheets("Drucktest")
'Jedes Druckblatt einzeln durchlaufen
For Druckblatt = 1 To Druckseiten(Blatt)
    'Erste Spalte auslassen, da dort
    'andere Infos stehen, wie Buchungsdatum, etc.

    For Spalten = 2 To Blatt.UsedRange.Columns.Count
        'Die Summe jeder Spalte berechnen
        'und als Übertrag in die zweite Zeile

        Blatt.Cells(2, Spalten) = _
            SummeSpalteBisDruckblatt( _
            Druckblatt, Spalten, Blatt _
            )
        Blatt.Cells(2, 1) = "Summe bis Blatt " & Druckblatt - 1
    Next
    'Blatt drucken
    Blatt.PrintOut From:=Druckblatt, To:=Druckblatt
Next
End Sub


Public Function SummeSpalteBisDruckblatt(ByVal Blattnummer As Long, _
    ByVal Spalte As Long, Blatt As Worksheet) As Double

Dim LetzteZeile, ErsteZeile As Long
If Blattnummer = 1 Then Exit Function
'Summe bis zum letzten Eintrag des vorherigen Blatts,
'deshalb ...

Blattnummer = Blattnummer - 1
Blatt.Activate
'Erste Zeile nächstes Blatt ermitteln, deshalb weiter
'unten LetzteZeile - 1
LetzteZeile = ExecuteExcel4Macro("INDEX(GET.DOCUMENT(64)," _
    & Blattnummer & ")")
'Zeile 2 nimmt Übertrag auf, deshalb ist ...
ErsteZeile = 3
'Wenn LetzteZeile nicht Numerisch ist, ist letztes Blatt erreicht
If IsNumeric(LetzteZeile) Then
    'Die Summe der Spalte ermitteln
    SummeSpalteBisDruckblatt = _
        Application.WorksheetFunction.Sum( _
        Blatt.Range( _
        Blatt.Cells(ErsteZeile, Spalte), _
        Blatt.Cells(LetzteZeile - 1, Spalte)) _
        )
End If
End Function

Public Function Druckseiten(Blatt As Worksheet)
Dim dummy
Blatt.Activate
For Druckseiten = 1 To 10000
    dummy = ExecuteExcel4Macro("INDEX(GET.DOCUMENT(64)," _
        & Druckseiten & ")")
    'Wenn dummy nicht Numerisch ist, ist letztes Blatt erreicht
    If Not IsNumeric(dummy) Then Exit For
Next
End Function