Microsoft Office Forum [ www.Office-Fragen.de ] >> READONLY <<

Microsoft Office 2003-2019 => Excel => Thema gestartet von: Barbara123456 am Oktober 30, 2014, 11:39:26 Vormittag

Titel: Arbeitsblätter in bestimmter Logik ausdrucken - Makro
Beitrag von: Barbara123456 am Oktober 30, 2014, 11:39:26 Vormittag
Hallo,

ich versuche mich gerade in meinen ersten Schritten bei Makros.

Hintergrund:
Ich habe eine Datei mit knapp 100 Blättern sowie ein Übersichtsblatt.
Je ca. 10 Blätter haben den gleichen Anfangsbuchstaben...
so habe ich A1, A2, A3 ...... A10, B1, B2, B3........B10 usw.

Nun möchte ich eine Schaltflache erstellen, die den Druck von nur einer Sorte Arbeitsblätter anschmeißt (z.B. nur die A-Blätter)...

Gefunden habe ich dieses Makro:

Sub Makro1()
'
' Makro1 Makro
' druckt alle Blätter Übergreifend
'
' Tastenkombination: Strg+A
'
    Sheets("Übergreifend").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("A1").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("A2").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("A3").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

und so weiter und so fort

End Sub

ABER - die Anzahl kann sich im Laufe der Zeit ändern durch Löschen / Hinzufügen von Blättern - und dann kommt eine Fehlermeldung -

Meine Frage:
Wie bekomme ich einen Makro hin, dass alle Blätter bspw. A 1-n druckt egal wieviel jetzt n sind?!

Wäre super, wenn mir hier jemand helfen könnte.

Viele Grüße
Barbara  :)
Titel: Antw: Arbeitsblätter in bestimmter Logik ausdrucken - Makro
Beitrag von: maninweb am November 02, 2014, 10:11:11 Vormittag
Hallo Barbara,

hier mal ein Beispiel, wie Du es per Code machen kannst. Der Code geht davon aus, dass eine Tabelle in der Mappe mit
dem Namen "Tabelle1", wo Du in Zelle A1 den Anfangsbuchstaben drin stehen hast, z.B. A.
Das kannst Du entsprechend anpassen, Zeile: strChar = ThisWorkbook.Works....

Code: Visual Basic
  1.   Public Sub PrintAllSheets()
  2.    
  3.     Dim strChar     As String
  4.     Dim lngIndex    As Long
  5.     Dim wksSheet    As Worksheet
  6.     Dim arrPrint()  As String
  7.    
  8. '   Initialisieren...
  9.    
  10.     lngIndex = 0
  11.     strChar = ThisWorkbook.Worksheets("Tabelle1").Cells(1, 1).Value
  12.    
  13. '   Vorhanden und nur ein Buchstabe?
  14.    
  15.     If Not Len(strChar) <> 1 Then
  16.      
  17.       ReDim arrPrint(1 To 1)
  18.      
  19.       For Each wksSheet In ThisWorkbook.Worksheets
  20.        
  21.         If Not Left(wksSheet.Name, 1) <> strChar Then
  22.          
  23. '         Index...
  24.          
  25.           lngIndex = lngIndex + 1
  26.          
  27. '         Neu dimensionieren...
  28.          
  29.           If lngIndex > 1 Then
  30.            
  31.             ReDim Preserve arrPrint(1 To lngIndex)
  32.            
  33.           End If
  34.          
  35. '         Hinzufügen...
  36.          
  37.           arrPrint(lngIndex) = wksSheet.Name
  38.          
  39.         End If
  40.        
  41.       Next
  42.      
  43. '     Drucken...
  44.      
  45.       If lngIndex > 0 Then
  46.      
  47.         ThisWorkbook.Worksheets(arrPrint).PrintPreview
  48. '       ThisWorkbook.Worksheets(arrPrint).PrintOut
  49.        
  50.       End If
  51.      
  52.     End If
  53.    
  54.   End Sub
  55.  

Der Code bildet eine dynamiches Array arrPrint, das die abgefragten Tabellen als Elemente beinhaltet. Dann wird
das Array der Tabellen zum Ausdruck (hier die Druckvorschau) übergeben. Da nicht feststeht (oder es variabel
sein kann), wie viele Tabellen passen, wird das Array im Code immer wieder neu dimensioniert (ReDim Preserve).
Du kannst das Makro z.B. auf eine Schaltfläche legen.

Gruß