VBA: Optionsbutton ja, dann Tabelle drucken
#31
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:
  • Bernie
Top
#32
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:
  • Bernie
Top
#33
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?
Top
#34
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:
  • Bernie, atilla
Top
#35
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
Top
#36
Hallo ihr Beiden,

beide Vorschläge funktionieren perfekt! Thumps_up
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!!!
Top
#37
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
Top
#38
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!
Top
#39
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
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste