Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo Bernie,
Du hast meine Variante nicht richtig verstanden.
Meine Vorstellung ist folgende.
Du hast x Tabellen in Deiner Datei. Es können Tabellen hinzukommen oder auch gelöscht werden. Dann müsstest Du, wenn du es so machst, wie Du es vorhast, das ständig im Code anpassen.
In meinem Beispiel liest Du einmalig alle Tabellen ein und kannst ihnen in der Spalte B eine Beschreibung eingeben. In Spalte C kruzt Du an, welche Tabellen für den druck vorgesehen sind, also in der Listbox auswählbar sein sollen. In Splate D führst Du die Tabellennamen auf, die generell gedruckt werden.
Das ist eine einmalige vorbereitende Arbeit. Die Tabelle kannst Du auch ausblenden. Wenn neue Tabellen hinzukommen oder Du andere tabellen auch zum Drucken vorsehen möchtest, brauchst Du am Code nichts mehr machen. Du markierst das in der Tabelle.
Dann nutzt Du zum Drucken nur noch die Userform. In der Listbox sind dann alle für den Druck vorgesehenen Tabellen aufgelistet. Dort wählst Du nach dem gleichen Prinzip, wie mit Deinen Checkboxen, die Tabellen aus, die gedruckt werden sollen.
Bei Klick auf Schaltfläche Drucken werden dann zuerst die fest zum Drucken in Spalte D aufgeführten Tabellen gedruckt, danach die in der Listbox ausgewählten.
Gruß Atilla
Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:1 Nutzer sagt Danke an atilla für diesen Beitrag 28
• Bernie
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo Bernie, so ist es, wenn ich einen Begriff falsch schreibe. Statt Bezeichnung der Checkbox hätte ich Beschriftung nehmen sollen und Du hättest mein Makro aus den Beitrag Nr. 2 nehmen können. Code: Private Sub drucken_Click()
Dim objDruckeTab As Object For Each objDruckeTab In Me.Controls If TypeName(objDruckeTab) = "CheckBox" Then If objDruckeTab.Caption <> "" Then If objDruckeTab Then Worksheets(objDruckeTab.Caption).PrintOut End If End If Next objDruckeTab
End Sub
Gruß Stefan Win 10 / Office 2016
Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:1 Nutzer sagt Danke an Steffl für diesen Beitrag 28
• Bernie
Registriert seit: 14.04.2014
Version(en): Office 2016 32bit
Hallo Ihr Beiden,
Beide Vorschläge funktionieren so, wie ich es mir dachte. Werde aber nicht verraten, welchen Vorschlag ich nun verwende. Ich gehe davon aus, dass keiner von Euch Beiden mir böse ist. :100:
Allerdings ist noch eine Kleinigkeit, dir nicht so sein sollte. Und zwar, obwohl ich jeder Tabelle manuell eine Fußzeile, mit der Maßgabe die Anzahl der Druckseiten zu erfassen, hinterlegt habe, wird bei beiden Vorschlägen das ignoriert. Es entsteht zwar die richtige Anzahl an Druckseiten, allerdings steht in jeder Fußzeile nur "Seite 1 von 1" und nicht fortlaufend.
Wie kann ich das ändern?
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo Bernie, in meinen bisherigen Vorschlag kann ja auch in der Regel nur Seite 1 von 1 Seiten stehen, weil jedes Tabellenblatt eigens ausgedruckt wird. Jetzt speichere ich jedes zu druckende Tabellenblatt in einem Array und am Ende geht es in den Druck. Code: Private Sub drucken_Click()
Dim objDruckeTab As Object Dim lngC As Long Dim vntDruckeTab() As String For Each objDruckeTab In Me.Controls If TypeName(objDruckeTab) = "CheckBox" Then If objDruckeTab.Caption <> "" Then If objDruckeTab Then ReDim Preserve vntDruckeTab(lngC) vntDruckeTab(lngC) = objDruckeTab.Caption lngC = lngC + 1 End If End If End If Next objDruckeTab Worksheets(vntDruckeTab()).PrintOut
End Sub
Gruß Stefan Win 10 / Office 2016
Folgende(r) 2 Nutzer sagen Danke an Steffl für diesen Beitrag:2 Nutzer sagen Danke an Steffl für diesen Beitrag 28
• Bernie, atilla
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo zusammen, Hallo Stefan, schöne Idee mit dem Ducken eines Arrays. Hätte nicht gedacht, dass es so gehen kann. Ich hätte jetzt versucht jedes einzelne Blatt anzusprechen um die Seitenzahl in die Fußzeile zu schreiben. Stefan, danke für das Beispiel. Dann adaptiere ich das mal in meine Version. Statt des bisherigen Codes hinter der Userform muss es dann so lauten: Code: Option Explicit
Private Sub CommandButton1_Click() Dim i As Long, lngZ As Long, n As Long Dim druckTabellen() 'Anzahl der ausgewählten Tabellen in Listbox feststellen For i = 0 To Me.ListBox1.ListCount - 1 If Me.ListBox1.Selected(i) = True Then n = n + 1 Next i 'alle Tabellen in Spalte D einlesen With Sheets("alleTabellen") lngZ = .Cells(.Rows.Count, 4).End(xlUp).Row ReDim druckTabellen(n + lngZ - 2) n = 0 For i = 2 To lngZ druckTabellen(n) = .Cells(i, 4).Value n = n + 1 Next i 'alle in der Listbox ausgewählten Tabellen einlesen For i = 0 To Me.ListBox1.ListCount - 1 If Me.ListBox1.Selected(i) = True Then druckTabellen(n) = Me.ListBox1.List(i, 1) 'PrintOut n = n + 1 End If Next i End With
'eingelesene Tabellen drucken Worksheets(druckTabellen()).PrintOut End Sub
Private Sub UserForm_Initialize() Dim i As Long, k As Long Dim lngZ As Long, lngA As Long Dim arr() With Sheets("alleTabellen") lngZ = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 lngA = Application.CountIf(.Columns(3), "X") If lngA > 0 Then ReDim arr(lngA - 1, 1) For i = 2 To lngZ If UCase(.Cells(i, 3).Value) = "X" Then arr(k, 0) = .Cells(i, 2).Value arr(k, 1) = .Cells(i, 1).Value k = k + 1 End If Next i With Me.ListBox1 .List = arr .ColumnCount = 2 .ColumnWidths = "100;0" End With End If End With End Sub
Bernie, Du musst in allen Blättern vorab die Seite mit entsprechenden Angaben einrichten.
Gruß Atilla
Registriert seit: 14.04.2014
Version(en): Office 2016 32bit
Hallo ihr Beiden, beide Vorschläge funktionieren perfekt! Ich hoffe, dass ich einmal die Gelegenheit bekomme nicht nur im Forum Danke zu sagen für eure Unterstützung, sondern persönlich. :15: Also lasst es mich wissen, wenn ihr mal in Bremen seid oder auch nur vorbei fahren wollt. Das gilt auch für die anderen tollen Helfer hier im Forum!!!
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo Bernie, (04.03.2015, 15:07)Bernie schrieb: Ich hoffe, dass ich einmal die Gelegenheit bekomme nicht nur im Forum Danke zu sagen für eure Unterstützung, sondern persönlich. :15: schau mal in den Forumskopf, da findest Du den Termin vom Forumstreffen. :05: :05: :05:
Gruß Stefan Win 10 / Office 2016
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi Bernie, (04.03.2015, 15:07)Bernie schrieb: Ich hoffe, dass ich einmal die Gelegenheit bekomme nicht nur im Forum Danke zu sagen für eure Unterstützung, sondern persönlich. :15: Also lasst es mich wissen, wenn ihr mal in Bremen seid oder auch nur vorbei fahren wollt. Das gilt auch für die anderen tollen Helfer hier im Forum!!! das ist ganz einfach: Du könntest nächstes Jahr das Treffen ausrichten, dann kommen wir alle zu Dir. :100: :18: In Bremen war ich noch nie!
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo Atilla, (04.03.2015, 13:47)atilla schrieb: schöne Idee mit dem Ducken eines Arrays. Hätte nicht gedacht, dass es so gehen kann. ehrlich gesagt: Ich auch nicht. War nur so ein Versuch. Wie ich das Auswählen von mehreren Tabellenblätter und anschließenden Drucken mit dem Makrorecorder aufgezeichnet habe, entstand so ein Code: Worksheets(Array("Tabelle1","......)).Select
Code und mir kam der Gedanke, wenn das mit einem Datenfeld funktioniert dann könnte es doch eventuell auch mit einem Array funktionieren. Ok, das sind zwei unterschiedliche Dinge aber ein blindes Huhn findet auch mal ein Korn. :)
Gruß Stefan Win 10 / Office 2016
|