Microsoft Excel

Herbers Excel/VBA-Archiv

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

Tabellenblätter drucken mit Inhaltsverzeichnis | Herbers Excel-Forum


Betrifft: Tabellenblätter drucken mit Inhaltsverzeichnis von: Heinz
Geschrieben am: 22.01.2010 17:36:20

Hallo!

Meine Arbeitsmappen haben ca. 100 Tabellenblätter. Mittels eines Addin werden im vordersten Tabellenblatt "Inhaltsverzeichnis" von A3 bis A102 (ggf ff) die Tabellennamen aufgelistet.

Franz (fcs) hat mir ein hervorragend funkionierendes Makro (mein erstes hier) zum Löschen von Zeilen des Inhaltsverzeichnises und der zugehörigen Tabellenblätter geschrieben (Zeile oder Zelle in der Zeile markieren - Makrobutton - msg-box - ja- Zeile(n) und Bla(e)tt(er) gelöscht - Super.

Nach Entfernen der Zeilenlöschfunktion und ersetzen von delete durch printout (eigene Versuche) funktioniert das Makro erstaunlicherweise genauso gut zum Drucken der so ausgewählten Blätter.

In manchen Fällen würde ich mir gerne die Druckauswahl speichern (z. B. zum wiederholten Drucken)
Mein Fragen/Bitten wären deshalb Folgende:

a) Was muss ich bitte in dem unten folgenden Makro ändern, damit die Tabellenblätter gedruckt werden, die ich hinter den jeweiligen Blattnamen in Spalte A in Spalte B mit einem x kennzeichne?

b) Wie kann ich bitte dazu einen bestimmten Drucker (FreePDF-Multidoc) anstelle des Standarddruckers vorgeben?

Sub BlaetterDrucken_mit_Inhaltsverzeichnis_H2()
   'Die folgende Prozedur kannst Du z.B. per Buttonklick starten,
   'nachdem Du die zu druckenden Zeilen markiert hast.
   'Die Markierungen kannst Du auch in Spalte B machen.
   'Du kannst Blöcke selektieren oder auch mehrere einzelne Zeilen
   '(bei gedrückter Strg-Taste).
      
   Dim rngSelektion As Range, Zeile As Range, lNr As Long, _
       strBlatt As String, arrZeilen() As Long, arrBlatt() As String
   lNr = 0
   If MsgBox("Blätter in markierten Zeilen Drucken?", vbQuestion + vbYesNo, _
       "Blätter Drucken") = vbYes Then
     'Daten der zu druckenden Blätter einlesen
     Set rngSelektion = Selection
     For Each Zeile In rngSelektion.Rows
       If Zeile.Row >= 3 And _
           fncCheckSheet(ActiveWorkbook, Worksheets(1).Cells(Zeile.Row, 1).Text) = True Then
         lNr = lNr + 1
         ReDim Preserve arrZeilen(1 To lNr)
         ReDim Preserve arrBlatt(1 To lNr)
         arrZeilen(lNr) = Zeile.Row
         arrBlatt(lNr) = Worksheets(1).Cells(Zeile.Row, 1)
       Else
         'Blatt mit Name in Spalte A ist nicht vorhanden
         Worksheets(1).Cells(Zeile.Row, 2) = "Blatt nicht vorhanden"
       End If
     Next
     If lNr > 0 Then
       Application.ScreenUpdating = False
       'Blätter drucken
       Application.DisplayAlerts = False
       ActiveWorkbook.Sheets(arrBlatt).PrintOut
       Application.DisplayAlerts = True
       
       Application.ScreenUpdating = True
     End If
   End If
 End Sub



Function fncCheckSheet(wb As Workbook, varBlatt) As Boolean
   'Prüft ob Blatt in Arbeitsmappe vorhanden
      
   Dim objSheet As Object
   For Each objSheet In wb.Sheets
     If objSheet.Index = varBlatt Or LCase(objSheet.Name) = LCase(varBlatt) Then
       fncCheckSheet = True
       Exit For
     End If
   Next
 End Function

  

Betrifft: AW: Tabellenblätter drucken mit Inhaltsverzeichnis von: fcs
Geschrieben am: 24.01.2010 04:12:32

Hallo Heinz,

es ist nicht so erstaunlich, dass die Prozedur für's Löschen und Drucken mit marginalen Anpassungen funktioniert. So wie man einzelne Tabellenblätter löschen und drucken kann

Sheets("Tabelle1") .Printout
Sheets("Tabelle1") .Delete

so kann man eben auch mehrere in einem Array angegeben Blätter auf einen Rutsch drucken oder auch löschen.

Ich hab deine Prozedur mal angepasst, so dass Blätter in mit "x" markierten Zeilen gedruckt werden.
Die genaue Bezeichnung von deinem Drucker muss du noch anpassen.

Die kleine Function bleibt unverändert. Die brauchst du auch nur einmal in deinem VBA-Projekt der Datei in einem allgemeinen Modul anzulegen.

Gruß
Franz

Sub BlaetterDrucken_mit_Inhaltsverzeichnis_H2_neu()
   'Die folgende Prozedur kannst Du z.B. per Buttonklick starten,
   'die Blätter der in Spalte B mit "x" markierten Blätter werden gedruckt.
      
   Dim wks As Worksheet, Zeile As Long, lNr As Long, _
       strDrucker As String, arrZeilen() As Long, arrBlatt() As String
   lNr = 0
   If MsgBox("Blätter in mit ""x"" markierten Zeilen Drucken?", vbQuestion + vbYesNo, _
       "Blätter Drucken") = vbYes Then
     'Daten der zu druckenden Blätter einlesen
     Set wks = Worksheets(1) ' = Worksheets("Inhalt")
     With wks
     For Zeile = 3 To .Cells(.Rows.Count, 2).End(xlUp).Row
       If LCase(.Cells(Zeile, 2)) = "x" And _
           fncCheckSheet(ActiveWorkbook, Worksheets(1).Cells(Zeile, 1).Text) = True Then
         lNr = lNr + 1
         ReDim Preserve arrZeilen(1 To lNr)
         ReDim Preserve arrBlatt(1 To lNr)
         arrZeilen(lNr) = Zeile
         arrBlatt(lNr) = Worksheets(1).Cells(Zeile, 1)
       Else
         'Blatt mit Name in Spalte A ist nicht vorhanden
         Worksheets(1).Cells(Zeile, 2) = "Blatt nicht vorhanden"
       End If
     Next
     End With
     If lNr > 0 Then
       Application.ScreenUpdating = False
       'Blätter drucken
       strDrucker = Application.ActivePrinter 'aktiven Drucker  merken
        'anderen Drucker wählen aktivieren - Name ggf. mit Makrorekorder aufzeichnen
       Application.ActivePrinter = "FreePDF auf Ne08:"
       
       Application.DisplayAlerts = False
'       ActiveWorkbook.Sheets(arrBlatt).PrintPreview
       ActiveWorkbook.Sheets(arrBlatt).PrintOut
       Application.DisplayAlerts = True
       
       Application.ActivePrinter = strDrucker 'gemerkten Drucker  wieder aktivieren
       Application.ScreenUpdating = True
     End If
   End If
 End Sub



  

Betrifft: AW: Tabellenblätter drucken mit Inhaltsverzeichnis von: Heinz
Geschrieben am: 24.01.2010 10:04:11

Hallo Franz

Auch diese Variante funktioniert einwandfrei. Damit kann ich jetzt wunschgemäß und schnell meine Tabellenblätter drucken und/oder löschen wie ich nur will. Ich darf garnicht daran denken, daß ich diese Prozeduren seit Jahren täglich mehrmals händisch in Einzelschritten durchgeführt habe.
Ich habe mich vor Jahren zwar mal in einem VHS-Kurs mit der Makro-Programmierung angelegt, habe dann dann aber doch vor dieser Makromier-Sprache kapituliert - wohlwissend, daß - von Dir eindrucksvoll bewiesen - faszinierte Möglichkeiten bestehen.

Ich bedanke mich wirklich ganz herzlich für die zwei von Dir geschaffenen Lösungsvarianten.

Mit freundlichen Grüßen

Heinz


Beiträge aus den Excel-Beispielen zum Thema "Tabellenblätter drucken mit Inhaltsverzeichnis"