AW: Druckmenu mit Listbox
06.08.2010 10:42:52
fcs
Hallo Rainer,
hier ein angepasster Code für das Userform.
Die Eigenschaften der Listbox (ColumnCount und ColumnWidths) kann man auch im Userform-Editor setzen. Diese müssen nicht unbedingt im Code gesetzt werden.
Ich hab den Index der Tabellenblätter verwendet für die Steuerung der zu druckenden Blätter. So kannst du in Zelle F1 der ggf. zu druckenden Blätter beliebige Informationen eintragen. Es muss nicht der Blattname sein.
Im Druckereinrichtungs-Dialog kann man "nur" den Drucker auswählen. Bei den Optionen wurden bei mir (Windos Vista, Office 2007) immer die Einstellungen des gerade aktiven Druckers angezeigt.
Gruß
Franz
Option Explicit
Private Sub CommandButton1_Click()
Dim lListBox As Long
Dim aTemp() As Variant
Dim iIndex As Integer
Dim DruckerAktiv As String
Dim oSheetAktiv As Object
Set oSheetAktiv = ActiveSheet
'Index-Nummern der selektierte Blätter in temporäres Array schreiben
For lListBox = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(lListBox) Then
iIndex = iIndex + 1
ReDim Preserve aTemp(1 To iIndex)
aTemp(iIndex) = CLng(ListBox1.List(lListBox, 2))
End If
Next lListBox
Me.Hide 'Erforderlich, falls mit Seitenvorschau gearbeitet wird
If iIndex > 0 Then
DruckerAktiv = Application.ActivePrinter 'aktiven Drucker merken
If Application.Dialogs(xlDialogPrinterSetup).Show = True Then
'Jedes Blatt als eigener Druckauftrag
For iIndex = 1 To UBound(aTemp)
With Worksheets(aTemp(iIndex))
' .PrintPreview
.PrintOut Copies:=1, Collate:=True
End With
Next iIndex
'oder alle Blätter gruppiert (ggf. mit fortlaufender Seitennummerierung)
' Sheets(aTemp).PrintOut
End If
Application.ActivePrinter = DruckerAktiv 'gemerkten Drucker wieder aktivieren
End If
oSheetAktiv.Select
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim WkSh As Worksheet
With ListBox1
.ColumnCount = 3
.ColumnWidths = "160pt;60pt;0pt"
For Each WkSh In Worksheets
If WkSh.Range("D1") = "ja" Then
.AddItem WkSh.Cells(1, 6) 'oder auch: WkSh.Name
.List(.ListCount - 1, 1) = WkSh.Cells(3, 4) & " Seiten"
.List(.ListCount - 1, 2) = WkSh.Index 'Indexnummer zur Steuerung des Druckens
End If
Next WkSh
End With
End Sub