Hallo,
ich mochte gerne per Makro alle Blätter meiner Arbeitsmappe ( die Daten enthalten), immer mit dem gleichen Druckbereich ("A1:H47") per Schaltfläche
drucken können. Mit Auswahl ......alle Arbeitsblätter, oder ein bestimmtes Blatt, oder eine bestimmte Zusammenstellung an Blättern.
Ob dieses machbar ist, weiß ich nicht...ich hoffe es?
Die Arbeitsblätter sind im Moment nummeriert, sollen aber später Namen bekommen.
Wie kann man das lösen?
Grüße Mike
Moin Mike,
in etwa so:
Code:
Sub GMG()
Dim wks As Worksheet
For Each wks In ActiveWindow.SelectedSheets
ActiveSheet.PageSetup.PrintArea = DeinDruckBereich
'Drucken
Next wks
End Sub
Vorher natürlich die Blätter markieren.
Hallo GMG-CC,
vielen Dank für deine Hilfe.
Ich probiere es heute Abend wenn ich zu Hause bin mal aus.
Muss ich dann jedes mal die Blätter anwählen und den Druckbereich auswählen?
Das wollte ich eigentlich vermeiden, da jedes Blatt den selben Bereich hat und ich mit einem Klick auf einem Botton,
alle Seiten (Blätter) oder eine bestimmet Anzahl an Blätter drucken möchte.
Aber wie gesagt, ich probiere erst einmal deinen Code aus und gebe ne Rückmeldung. :)
Vielen Dank.
Hi Mike,
(03.03.2016, 12:29)Mike4711 schrieb: [ -> ]Muss ich dann jedes mal die Blätter anwählen und den Druckbereich auswählen?
Das wollte ich eigentlich vermeiden, da jedes Blatt den selben Bereich hat und ich mit einem Klick auf einem Botton,
alle Seiten (Blätter) oder eine bestimmet Anzahl an Blätter drucken möchte.
der Druckbereich ist im Makro für alle Blätter gleich und es werden alle ausgewählten Blätter gedruckt.
Woher soll Excel sonst wissen, ob Du alle oder eine bestiimmte Anzahl oder nur eines ausdrucken willst? Wenn die jeweilige Anzahl fix ist, könntest Du es über mehrere Buttons lösen: einer für alle, einer für das aktive Blatt, einer für Blatt 2,3,7,10; einer für Blatt 2,4,6,8; usw...
Hallo Mike,
Du kannst auch das BeforePrint Ereignis nutzen um den Druckbereich festzulegen.
Entweder:
wenn in der Datei für alle Blätter immer der gleiche Druckbereich gelten soll,
dann kannst Du das im BeforePrint Ereignis regeln.
Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveSheet.PageSetup.PrintArea = "A1:H47"
End Sub
Egal welche Tabelle gedruckt wird, gilt für diese der im Code festgelegte Druckbereich.
Oder, wenn es nur für bestimmte Blätter gelten soll, dann so:
Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If InStr("Tabelle1 Tabelle2 Tabelle3", ActiveSheet.Name) Then
ActiveSheet.PageSetup.PrintArea = "A1:H47"
End If
End Sub
Der im Code festgelegter Druckbereich gilt in diesem Fall nur für die im Code gelisteten Tabellen.
Eines der Codes muss dann in das Code Modul DieseArbeitsmappe
Hallo Mike,
ich schlage ein Userform vor:
Dialog ufAusdruckOption Explicit
Private Sub cbAuswahl_Click()
Dim lngZ As Long
For lngZ = 0 To Me.ListBox1.ListCount - 1
ListBox1.Selected(lngZ) = Not ListBox1.Selected(lngZ) And Len(ListBox1.List(lngZ))
Next lngZ
End Sub
Private Sub cbDrucken_Click()
Dim lngZ As Long
On Error Resume Next
Me.Hide
For lngZ = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(lngZ) Then
'Worksheets(CStr(ListBox1.List(lngZ))).Range("A1:H47").PrintPreview
Worksheets(CStr(ListBox1.List(lngZ))).Range("A1:H47").PrintOut Copies:=tbKopien, Collate:=False
End If
Next lngZ
Me.cbSchliessen.SetFocus
Me.Show
End Sub
Private Sub cbDruckerauswahl_Click()
Application.Dialogs(xlDialogPrinterSetup).Show
End Sub
Private Sub cbSchliessen_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim oWorksheet As Worksheet
ListBox1.Clear
With ListBox1
For Each oWorksheet In ActiveWorkbook.Worksheets
.AddItem oWorksheet.Name
.Selected(.ListCount - 1) = True
Next oWorksheet
End With
End Sub
VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media
Code erstellt und getestet in Office 14 - mit VBAHTML 12.6.0
Typ | Name | Eigenschaften |
CommandButton | cbAuswahl | Caption: | Auswahl umkehren | Height: | 24 | Left: | 144 | TabIndex: | 3 | Top: | 15,75 | Width: | 78,75 |
|
CommandButton | cbDrucken | Caption: | Auswahl Drucken | Height: | 24 | Left: | 144 | TabIndex: | 2 | Top: | 108 | Width: | 78,75 |
|
CommandButton | cbSchliessen | Cancel: | Wahr | Caption: | Schließen | Height: | 24 | Left: | 144 | TabIndex: | 6 | Top: | 157,5 | Width: | 78,75 |
|
CommandButton | cbDruckerauswahl | Caption: | Drucker auswählen | Height: | 24,75 | Left: | 144 | Top: | 49,5 | Width: | 78,75 |
|
Label | Label1 | Caption: | Anzahl Kopien: | Height: | 13,5 | Left: | 148,5 | TabIndex: | 5 | Top: | 85,5 | Width : | 54 |
|
ListBox | ListBox1 | BorderStyle: | 1 | Height: | 341,3 | Left: | 9 | ListStyle: | 1 | MultiSelect: | 1 | SpecialEffect: | 0 | TabIndex: | 4 | TabStop: | Falsch | Top: | 15,75 | Width: | 125,25 |
|
TextBox | tbKopien | Height: | 15,75 | Left: | 202,5 | Text: | 1 | Top: | 83,25 | Value: | 1 | Width: | 20,25 |
|
Gruß Uwe
Hallo Kuwer,
dein Lösung sieht spitze aus.......irgendwie so, hatte ich das in meinen Vorstellungen.
Ich versuche das mal in Ruhe auf meine Arbeitsmappe umzusetzen.
Sollte ich das nicht hin bekommen, melde ich mich wieder bei dir.
Vielen Dank für deinen Vorschlag.
Gruß Mike
(03.03.2016, 14:08)atilla schrieb: [ -> ]Hallo Mike,
Du kannst auch das BeforePrint Ereignis nutzen um den Druckbereich festzulegen.
Entweder:
wenn in der Datei für alle Blätter immer der gleiche Druckbereich gelten soll,
dann kannst Du das im BeforePrint Ereignis regeln.
Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveSheet.PageSetup.PrintArea = "A1:H47"
End Sub
Egal welche Tabelle gedruckt wird, gilt für diese der im Code festgelegte Druckbereich.
Oder, wenn es nur für bestimmte Blätter gelten soll, dann so:
Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If InStr("Tabelle1 Tabelle2 Tabelle3", ActiveSheet.Name) Then
ActiveSheet.PageSetup.PrintArea = "A1:H47"
End If
End Sub
Der im Code festgelegter Druckbereich gilt in diesem Fall nur für die im Code gelisteten Tabellen.
Eines der Codes muss dann in das Code Modul DieseArbeitsmappe
Hallo Atilla, auch deinen Vorschlag werde ich mal ausprobieren. Du hast mir bisher auch immer sehr gut geholfen. Ich wünschte, ich hätte bisher mehr Zeit gehabt, Makroprogrammierung besser zu verstehen. Aber die letzten Monate waren sehr turbulent. Gruß Mike
Hallo Kuwer,
deine Userform ist Spitze.
Eine Frage habe ich hierzu.
Könnte man dort noch einen zusätzlichen Button einbinden, der die ausgewählten Blätter auch als PDF
abspeichern lässt, mit Speicherort Auswahl?
glg
Mike
Hallo Mike,
vielleicht so mit dem PDF-Speichern:
Private Sub cbPDF_Click()
Dim lngZ As Long, oWs As Worksheet, strPDF As String
strPDF = Application.GetSaveAsFilename(, "PDF (*.pdf), *.pdf")
If Not CVar(strPDF) = False Then
For lngZ = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(lngZ) Then
If Not oWs Is Nothing Then
Worksheets(CStr(ListBox1.List(lngZ))).Select False
Else
Set oWs = ActiveSheet
Worksheets(CStr(ListBox1.List(lngZ))).Select True
End If
End If
Next lngZ
ActiveSheet.Range("A1:H47").Select
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strPDF, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=True, OpenAfterPublish:=False
ActiveCell.Select
oWs.Select
End If
End Sub
Gruß Uwe