Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Sheets(Array(...")).PrintOut, Blätter variabel

Sheets(Array(...")).PrintOut, Blätter variabel
25.09.2015 08:40:22
Kasimir
Moin an alle!
Ich habe da mal wieder an Anliegen. Ich möchte eine variable Zahl von Tabellenblätter drucken. Wenn ich mir das Makro aufzeichne erhalte ich nachfolgenden VBA-Code
Sheets(Array("Blatt1", "Blatt2", "Blatt3", "Blatt4")).PrintOut Copies:=1, Collate:=True, _ IgnorePrintAreas:=False
Hier werden ja die Blätter 1 bis 4 ausgedruckt. Ich möchte aber nicht vorher schon festlegen welche Blätter, sondern erst durch ein Kriterium in meiner Mastertabelle. Ich könnte das ja nun auch über eine Schleife realisieren, aber bei obiger Lösung wird automatisch die Blattnummer und die Anzahl der markierten Blätter in der Fußzeile ausgegeben.
Ich hatte es auch schon damit versucht alle zu druckenden Blätter in ein Array zu schreiben, bin dann aber an dem Versuch die Daten aus dem Array in obigen VBA-Code zu bekommen gescheitert.
Wie kann ich nun die Angabe "Blatt1", "Blatt2", "Blatt3", "Blatt4" gegen einen variablen Bereich austauschen
MfG,
Kasimir

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sheets(Array(...")).PrintOut, Blätter variabel
25.09.2015 08:54:30
Nepumuk
Hallo,
da du keinerlei Angaben dazu machst wie was in deiner Mastertabelle aussieht, ein einfaches Beispiel:
Public Sub Test()
    Dim avntArray() As Variant
    Redim avntArray(2)
    avntArray(0) = "Tabelle1"
    avntArray(1) = "Tabelle2"
    avntArray(2) = "Tabelle3"
    Worksheets(avntArray).PrintOut
End Sub

Gruß
Nepumuk

Anzeige
AW: Sheets(Array(...")).PrintOut, Blätter variabel
25.09.2015 09:06:15
Daniel
Hi
hier mal ein Beispiel, wie du Blätter mit einer Bestimmten Bedinung markieren und zusammen drucken kannst.
Da du deine Bedingung nicht genauer beschrieben hast, nehme ich alle Blätter deren Blattname mit "xxx" beginnt:
dim sh as Worksheet
dim first as boolean
first = True
for each sh in ActiveWorkbook.Worksheets
if sh.Name like "xxx*" then
sh.select first
first = false
end if
next
ActiveWindow.SelectedSheets.PrintOut
die Methode ist, dass man die Blätter einzeln nacheinander selektiert, aber ab der zweiten Selektion den ersten Parameter der Select-Funktion = FALSE setzt.
der erste Parameter der Select-Funktion steuert, ob beim Selektieren eines Objektes die alte Selektion verworfen wird (True oder nicht angegeben) oder ob die alte Selektion um die neue erweitert wird (False), so wie bei gedrückter STRG-Taste.
Gruß Daniel

Anzeige
Array mit Horizontale Ausrichtung
25.09.2015 09:53:55
Tino
Hallo,
du brauchst nur ein Array erstellen welches eine Horizontale Ausrichtung hat.
Wie du dies aufbaust ist egal, so wie im Beispiel oder mit einer Schleife usw...
Beispiel:
Sub PrintTabs()
Dim varTabs
'Range wo die Tabellen stehen
'Keine leeren Zellen u. nur Tabellen die vorhanden sind!
With Tabelle1.Range("A2:A4")
If .Cells.Count > 1 Then
varTabs = .Value2
If UBound(varTabs, 2) = 1 Then
varTabs = Application.Transpose(varTabs)
End If
Else
varTabs = Array(.Value)
End If
End With
Worksheets(varTabs).PrintOut
End Sub
Gruß Tino

Anzeige
Danke für die Lösungen!
26.09.2015 17:30:44
Kasimir
Hallo an alle!
Sorry, dass ich erst jetzt reagiere, aber ich bin leider nicht eher dazu gekommen, die Lösungen auszuprobieren. Besten dank an alle für die Hilfe. Für mich war die Lösung von Daniel das was ich gesucht habe.
Schönes WE noch,
Kasimir
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Variabeln für die Druckausgabe von Excel-Tabellenblättern nutzen


Schritt-für-Schritt-Anleitung

Um eine variable Anzahl von Tabellenblättern in Excel auszudrucken, kannst Du die folgenden Schritte befolgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den Visual Basic for Applications (VBA)-Editor zu öffnen.

  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle "Einfügen" > "Modul".

  3. Füge den Code ein: Verwende den folgenden VBA-Code, um ein Array von Blättern zu erstellen und diese auszudrucken:

    Sub PrintVariableSheets()
       Dim avntArray() As Variant
       Dim i As Integer
    
       ' Hier definierst Du den Bereich, der die Namen der Blätter enthält
       avntArray = Array("Blatt1", "Blatt2", "Blatt3") ' Beispiel für drei Blätter
    
       ' Drucke die Blätter aus
       Worksheets(avntArray).PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    End Sub
  4. Passe den Array an: Ändere die Namen in avntArray, um die Blätter zu reflektieren, die Du drucken möchtest.

  5. Führe das Makro aus: Drücke F5, um das Makro auszuführen, und Deine ausgewählten Blätter werden gedruckt.


Häufige Fehler und Lösungen

  • Problem: "Laufzeitfehler 9: Index außerhalb des gültigen Bereichs."

    • Lösung: Stelle sicher, dass alle Blätternamen im Array korrekt sind und existieren.
  • Problem: "Keine Druckausgabe."

    • Lösung: Überprüfe die Druckereinstellungen und stelle sicher, dass der Drucker korrekt konfiguriert ist.
  • Problem: "Blätter werden nicht richtig ausgewählt."

    • Lösung: Achte darauf, dass Du die sheets(array)-Syntax korrekt verwendest und die Namen in Anführungszeichen stehen.

Alternative Methoden

  1. Verwendung einer Schleife: Du kannst eine Schleife verwenden, um Blätter nach bestimmten Kriterien auszuwählen. Hier ein Beispiel:

    Sub PrintSheetsWithCriteria()
       Dim sh As Worksheet
       Dim first As Boolean
       first = True
    
       For Each sh In ActiveWorkbook.Worksheets
           If sh.Name Like "xxx*" Then ' Filtere nach Blättern, die mit "xxx" beginnen
               sh.Select first
               first = False
           End If
       Next
       ActiveWindow.SelectedSheets.PrintOut
    End Sub
  2. Horizontales Array: Um ein Array mit horizontaler Ausrichtung zu erstellen, kannst Du folgenden Code nutzen:

    Sub PrintHorizontalArray()
       Dim varTabs
       With Tabelle1.Range("A2:A4") ' Beispielbereich
           varTabs = .Value2
           Worksheets(varTabs).PrintOut
       End With
    End Sub

Praktische Beispiele

  • Beispiel für ein einfaches Array:

    Sub SimplePrint()
       Dim avntArray() As Variant
       avntArray = Array("Blatt1", "Blatt2", "Blatt3")
       Worksheets(avntArray).PrintOut
    End Sub
  • Beispiel für dynamische Auswahl:

    Sub DynamicSelection()
       Dim avntArray() As Variant
       Dim sheetCount As Integer
    
       sheetCount = Application.Worksheets.Count
       ReDim avntArray(sheetCount - 1)
    
       For i = 0 To sheetCount - 1
           avntArray(i) = Worksheets(i + 1).Name
       Next i
    
       Worksheets(avntArray).PrintOut
    End Sub

Tipps für Profis

  • Vermeide leere Zellen: Stelle sicher, dass der Bereich, aus dem Du die Blattnamen abrufst, keine leeren Zellen enthält.

  • Verwende Application.Transpose: Wenn Dein Array nicht in der erwarteten Ausrichtung ist, kann Application.Transpose nützlich sein.

  • Dokumentiere Deinen Code: Füge Kommentare in Deinen VBA-Code ein, um die Logik zu erklären und zukünftige Anpassungen zu erleichtern.


FAQ: Häufige Fragen

1. Wie kann ich die Anzahl der Kopien ändern? Du kannst die Anzahl der Kopien im PrintOut-Befehl anpassen, indem Du den Parameter Copies:=X änderst, wobei X die gewünschte Anzahl ist.

2. Was ist der Unterschied zwischen Collate:=True und Collate:=False? Collate:=True druckt die Blätter in einer sortierten Reihenfolge (z.B. 1, 1, 2, 2), während Collate:=False alle Kopien eines Blattes hintereinander druckt (z.B. 1, 2, 1, 2).

3. Wie kann ich die Druckbereiche ignorieren? Setze IgnorePrintAreas:=True, um die definierten Druckbereiche zu ignorieren und den gesamten Inhalt der Blätter zu drucken.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige