Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Druck via Makro von zwei Tabellenblättern

Betrifft: Druck via Makro von zwei Tabellenblättern von: Excelperte
Geschrieben am: 29.08.2014 21:25:36

Hallo,

ich habe neulich Hilfe von Franz bekommen: https://www.herber.de/forum/archiv/1376to1380/t1377667.htm

Ausgangspunkt ist ein Makro, dass Tabelle2 (Querformat) als Multi-Doc druckt und dabei ggf. den Drucktitel (mittlerweile 3 Zeilen) auf der letzten Seite auf zwei Zeilen reduziert und gleichzeitig das Umbrechen der letzten 17 Zeilen verhindert. Soweit ist alles perfekt!

Jetzt habe ich in Tabelle1 zwei Titelseiten im Hochformat (deswegen ein anderes Tabellenblatt) und möchte beide Tabellenblätter mittels eines Makros (oder auch ohne, falls das geht) ausdrucken - Seitenumbruch und Anpassung des Drucktitels funktionieren nun leider nicht mehr. Wer weiß Rat?

Sub Tabelle2()
    
    Call Tabelle1_Titel_drucken
    Call Tabelle2_Drucktitel_bedingt_drucken

End Sub
Sub Tabelle1_Titel_drucken()

Sheets("Tabelle2_0").PrintOut Copies:=1, Collate:=True
MsgBox "Titel wird gedruckt"

End Sub
Sub Tabelle2_Drucktitel_bedingt_drucken()

  Dim a%, b%, wks As Worksheet, Zeile_L As Long, Zeile_Zus1 As Long

  Set wks = Sheets("Tabelle2")
  wks.Select

  With wks
    'Letzte Zeile mit Daten in Spalte Q = letzte Zeile Zusammenfassung
    Zeile_L = .Cells(.Rows.Count, 17).End(xlUp).Row 'ggf. Nummer der Spalte anpassen
    '1. Zeile der Zusammenfassung
    Zeile_Zus1 = Zeile_L - 16
    
    .PageSetup.Order = xlDownThenOver
    .PageSetup.PrintTitleRows = "$1:$3"
    Application.ActiveWindow.View = xlPageBreakPreview
    Application.ActiveWindow.View = xlNormalView
    a = ExecuteExcel4Macro("GET.DOCUMENT(50)")
    
    If Zeile_Zus1 <= .HPageBreaks(.HPageBreaks.Count).Location.Row Then
        .HPageBreaks.Add before:=.Cells(Zeile_Zus1, 1)
        b = a - 1
    Else
        b = a
    End If
    
    If a > b Then
      MsgBox "Ausdruck erfolgt in 2 Druck-Jobs. Bei FreePDF im Dialog bitte " _
          & "beim 1. Job ""MultiDoc"" wählen, beim 2. ""Ablegen/Auf Desktop""", _
          vbOKOnly + vbInformation, "Drucken FreePDF"
          
      Sheets("Tabelle2").PrintOut From:=1, To:=b, Copies:=1, Collate:=True
      
      .PageSetup.PrintTitleRows = "$1:$2"
      .PrintOut From:=a, To:=a, Copies:=1, Collate:=True
    
      .HPageBreaks(.HPageBreaks.Count).Delete
      .PageSetup.PrintTitleRows = "$1:$3"
    Else
      .PrintOut
    End If
  End With
  MsgBox "Tabelle wird gedruckt"
End Sub

  

Betrifft: AW: Druck via Makro von zwei Tabellenblättern von: Excelperte
Geschrieben am: 29.08.2014 22:45:18

Beim Drucken sollen die Seitenzahlen in der Fußnote zudem noch fortlaufend gedruckt werden. Besten Dank für Eure Hilfe!!!

Hier nochmal alles - hoffentlich diesmal ohne Tippfehler:

Sub Beide_Tabellen_drucken()
    
    Call Tabelle1_Titel_drucken
    Call Tabelle2_Drucktitel_bedingt_drucken

End Sub

Sub Tabelle1_Titel_drucken()

Sheets("Tabelle1").PrintOut Copies:=1, Collate:=True
MsgBox "Titel wird gedruckt"

End Sub

Sub Tabelle2_Drucktitel_bedingt_drucken()

  Dim a%, b%, wks As Worksheet, Zeile_L As Long, Zeile_Zus1 As Long

  Set wks = Sheets("Tabelle2")
  wks.Select

  With wks
    'Letzte Zeile mit Daten in Spalte Q = letzte Zeile Zusammenfassung
    Zeile_L = .Cells(.Rows.Count, 17).End(xlUp).Row 'ggf. Nummer der Spalte anpassen
    '1. Zeile der Zusammenfassung
    Zeile_Zus1 = Zeile_L - 16
    
    .PageSetup.Order = xlDownThenOver
    .PageSetup.PrintTitleRows = "$1:$3"
    Application.ActiveWindow.View = xlPageBreakPreview
    Application.ActiveWindow.View = xlNormalView
    a = ExecuteExcel4Macro("GET.DOCUMENT(50)")
    
    If Zeile_Zus1 <= .HPageBreaks(.HPageBreaks.Count).Location.Row Then
        .HPageBreaks.Add before:=.Cells(Zeile_Zus1, 1)
        b = a - 1
    Else
        b = a
    End If
    
    If a > b Then
      MsgBox "Ausdruck erfolgt in 2 Druck-Jobs. Bei FreePDF im Dialog bitte " _
          & "beim 1. Job ""MultiDoc"" wählen, beim 2. ""Ablegen/Auf Desktop""", _
          vbOKOnly + vbInformation, "Drucken FreePDF"
          
      Sheets("Tabelle2").PrintOut From:=1, To:=b, Copies:=1, Collate:=True
      
      .PageSetup.PrintTitleRows = "$1:$2"
      .PrintOut From:=a, To:=a, Copies:=1, Collate:=True
    
      .HPageBreaks(.HPageBreaks.Count).Delete
      .PageSetup.PrintTitleRows = "$1:$3"
    Else
      .PrintOut
    End If
  End With
  MsgBox "Tabelle wird gedruckt"
End Sub



  

Betrifft: AW: Druck via Makro von zwei Tabellenblättern von: fcs
Geschrieben am: 31.08.2014 11:52:09

Hallo Excelperte,

kleine Zusatzfrage:
Wird auf den einzelnen Seiten beim Drucken in der Fußzeile auch die Gesamtseitenzahl gedruckt?
Falls JA, dann wird es richtig kompliziert, Falls nein, dann muss man "nur" für Tabelle2

Lade zum Testen hier bitte eine Beispiel-Datei hoch - ggf. Dummy-Daten.

Gruß
Franz


  

Betrifft: AW: Druck via Makro von zwei Tabellenblättern von: Excelperte
Geschrieben am: 01.09.2014 21:13:23

Hallo Franz,

es soll die Gesamtseitenanzahl angezeigt werden. Allerdings besitzt Tabelle1 eine feste Seitenzahl: 2 Seiten. Tabelle2 ist variabel in der Seitenzahl. Damit bräuchte ich nur eine Formel für die Gesamtseitenanzahl für Tabelle1.

Hier mal eine Beispiel-Datei: https://www.herber.de/bbs/user/92429.xlsm

Ich erhalte übrigens öfter folgende Fehlermeldung beim Drucken via Makro:

Laufzeitfehler 9 (Index außerhalb des gültigen Bereichs), welcher sich auf folgende Zeile bezieht:


If Zeile_Zus1 "kleiner-gleich" .HPageBreaks(.HPageBreaks.Count).Location.Row Then


Dieser Fehler tritt immer auf, wenn Tabelle2 nur eine Seite besitzt, aber auch sonst hin und wieder ...

Hoffe, Du weißt Rat! ;-) Hiermit konnte ich nicht viel anfangen: http://support.microsoft.com/kb/210663/de


  

Betrifft: AW: Druck via Makro von zwei Tabellenblättern von: fcs
Geschrieben am: 02.09.2014 11:21:40

Hallo Excelperte,

ich hab das Makro angepasst. Die Anpassungen hielten sich zum Glück in Grenzen.
Du musst aber die Fußzeilen der Beiden Blätter anpassen und die +2 bzw. +3 bei den Seitenzahlen entfernen. Jetzt:
Seite &[Seite] von &[Seiten]

Beim Drucken werden jetzt immer beide Blätter gruppiert gedruckt, da rechnet Excel die Werte für Seitenzahlen und Gesamtseitenzahl korrekt aus.

Gruß
Franz

Sub Drucken_Tab1_plus_Tab2()

  Dim a%, b%, wks As Worksheet, Zeile_L As Long, Zeile_Zus1 As Long

  Set wks = Sheets("Tabelle2")
  wks.Select

  With wks
    'Letzte Zeile mit Daten in Spalte Q = letzte Zeile Zusammenfassung
    Zeile_L = .Cells(.Rows.Count, 17).End(xlUp).Row 'ggf. Nummer der Spalte anpassen
    '1. Zeile der Zusammenfassung
    Zeile_Zus1 = Zeile_L - 16
    
    .PageSetup.Order = xlDownThenOver
    .PageSetup.PrintTitleRows = "$1:$3"
    Application.ActiveWindow.View = xlPageBreakPreview
    Application.ActiveWindow.View = xlNormalView
    a = ExecuteExcel4Macro("GET.DOCUMENT(50)")
    If .HPageBreaks.Count = 0 Then
        b = a
    ElseIf Zeile_Zus1 <= .HPageBreaks(.HPageBreaks.Count).Location.Row Then
        .HPageBreaks.Add before:=.Cells(Zeile_Zus1, 1)
        b = a - 1
    Else
        b = a
    End If
    
    If a > b Then
      MsgBox "Ausdruck erfordert 3 Druck-Jobs. Bei FreePDF im Dialog bitte " _
          & "beim 1. und 2 Job ""MultiDoc"" wählen, beim 3. ""Ablegen/Auf Desktop""", _
          vbOKOnly + vbInformation, "Drucken FreePDF"
          
      Sheets(Array("Tabelle1", "Tabelle2")).PrintOut From:=1, To:=b + 2, Copies:=1, Collate:= _
True
      
      .PageSetup.PrintTitleRows = "$1:$2"
      Sheets(Array("Tabelle1", "Tabelle2")).PrintOut From:=a + 2, To:=a + 2, Copies:=1, Collate: _
=True
    
      .HPageBreaks(.HPageBreaks.Count).Delete
      .PageSetup.PrintTitleRows = "$1:$3"
    Else
      MsgBox "Ausdruck erfordert 2 Druck-Jobs. Bei FreePDF im Dialog bitte " _
          & "beim 1. ""MultiDoc"" wählen, beim 2. ""Ablegen/Auf Desktop""", _
          vbOKOnly + vbInformation, "Drucken FreePDF"
      Sheets(Array("Tabelle1", "Tabelle2")).PrintOut
    End If
  End With
End Sub



  

Betrifft: AW: Druck via Makro von zwei Tabellenblättern von: michaelist@baldpapa.de
Geschrieben am: 04.09.2014 00:24:14

PERFEKT! Klappt alles wunderbar, hab 1000 DANK!

Gruß

Excelperte


 

Beiträge aus den Excel-Beispielen zum Thema "Druck via Makro von zwei Tabellenblättern"