Anzeige
Archiv - Navigation
1168to1172
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Druckmenu mit Listbox

Druckmenu mit Listbox
RainerK
Hallo,
habe mit Hilfe Eurer Codes ein Druckmenu mit Listbox erstellt. Im Ablauf habe ich es wie gewünscht hinbekommen.
Allerdings fehlt mir hier >>> https://www.herber.de/bbs/user/70933.xls
nun noch inhaltlich eine Kleinigkeit.
1. möchte die erste Textspalte mit mehr Zeichen angezeigt bekommen
2. möchte eine zweite Spalte mit der Formel

"(Cells 3, 4) & " Seiten"

3. vor dem Druck das Auswahlfenster der Drucker angezeigt bekommen.
angezeigt bekommen.
Gruß
RainerK

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Druckmenu mit Listbox
06.08.2010 08:35:51
RainerK
Hallo,
Punkt 1 habe ich gerade hinbekommen.
Private Sub UserForm_Initialize()
Dim WkSh  As Worksheet
With ListBox1
For Each WkSh In Worksheets
If WkSh.Range("D1") = "ja" Then
.ColumnWidths = 160
.AddItem WkSh.Cells(1, 6)
End If
Next WkSh
End With
End Sub

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

Anzeige
AW: Druckmenu mit Listbox
06.08.2010 11:15:17
RainerK
Hallo Franz,
danke für Deine Mithilfe; klappt einwandfrei.
Allerdings hatte ich noch einen Gedanken, den ich in meinem Beispielcode falsch berücksichtigt hatte.
Mit D2 möchte ich eine Vorauswahl treffen, weshalb ich den Druck über D2 gesteuert habe.
Könntest Du mir da bei der Umgestaltung noch behilflich sein?
(sprich wenn D2, dann Häckchen gesetzt)
Gruß RainerK
AW: Druckmenu mit Listbox
06.08.2010 11:31:49
fcs
Hallo Rainer,
dann ist in der Initialisierungsprozedur eine kleine Ergänzung erforderlich.
Gruß
Franz
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
If WkSh.Range("D2") = "ja" Then
.Selected(.ListCount - 1) = True
End If
End If
Next WkSh
End With
End Sub

Anzeige
AW: Druckmenu mit Listbox
06.08.2010 11:53:42
RainerK
Hallo Franz,
danke, klappt.
Gruß RainerK
AW: Druckmenu mit Listbox
06.08.2010 12:45:06
RainerK
Hallo Franz,
eine Kleinigkeit ist nun noch:
Habe Deine Codezeilen so aktiviert, dass ich alle Seiten auf einmal bzw. in ein PDF drucken kann.
Nun kommt die erste Seite + danach nochmal alle Seiten (diese dann dafür wie gewünscht auf einmal).
Wo übersehe ich die Zeilen, die das erste Blatt zusätzlich drucken?
https://www.herber.de/bbs/user/70944.xls
Gruß RainerK
AW: Druckmenu mit Listbox
06.08.2010 15:48:33
fcs
Hallo Rainer,
du hast jetzt den Drucken-Dialog verwendet.
Nach OK werden die momentan selektierten Blätter gedruckt - normal das aktive Blatt.
Danach folgt dann im Makro der Befehl zum Drucken aller Blätter.
Damit dein Userform so funktioniert müssen die zu druckenden Blätter vor der Anzeige des Drucken-Dialogs selektiert werden.
Zur Anzeige der Anzahl der gewählten Seiten muss du mit der Listbox1_Change-Prozedur arbeiten, die Click-Prozedur wird hier aus unbekanntem Grund nicht gestartet.
Gruß
Franz
hier der anzupassende Code-Abschnitt.
    If iIndex > 0 Then
DruckerAktiv = Application.ActivePrinter 'aktiven Drucker merken
'If Application.Dialogs(xlDialogPrinterSetup).Show = True Then
'  alle Blätter gruppiert (ggf. mit fortlaufender Seitennummerierung)
Sheets(aTemp).Select
'oder jedes Blatt als eigener Druckauftrag
'     Worksheets(aTemp(1)).Select '1. ausgewähltes Blatt selektieren
If Application.Dialogs(8).Show = True Then
'         if iindex>1 then
' restliche Blätter einzeln drucken
'         For iIndex = 2 To UBound(aTemp)
'          With Worksheets(aTemp(iIndex))
''             .PrintPreview
'            .PrintOut Copies:=1, Collate:=True
'          End With
'        Next iIndex
'         End If
End If
Application.ActivePrinter = DruckerAktiv 'gemerkten Drucker wieder aktivieren
End If
Private Sub ListBox1_Change()
Dim iSeiten As Integer, lListBox
For lListBox = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(lListBox) Then
iSeiten = iSeiten + Worksheets(CLng(ListBox1.List(lListBox, 2))).Cells(3, 4)
End If
Next lListBox
Me.Label2.Caption = "Ausgewählt:     " & iSeiten & " Seiten"
End Sub

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige