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

Bild

Betrifft: Sheets(Array(...")).PrintOut, Blätter variabel
von: Kasimir
Geschrieben am: 25.09.2015 08:40:22

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

Bild

Betrifft: AW: Sheets(Array(...")).PrintOut, Blätter variabel
von: Nepumuk
Geschrieben am: 25.09.2015 08:54:30
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

Bild

Betrifft: AW: Sheets(Array(...")).PrintOut, Blätter variabel
von: Daniel
Geschrieben am: 25.09.2015 09:06:15
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

Bild

Betrifft: Array mit Horizontale Ausrichtung
von: Tino
Geschrieben am: 25.09.2015 09:53:55
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

Bild

Betrifft: Danke für die Lösungen!
von: Kasimir
Geschrieben am: 26.09.2015 17:30:44
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

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Sheets(Array(...")).PrintOut, Blätter variabel"