Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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
Antworten 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
Antworten 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?
Grüße aus Bremen
Bernie

"Wenn du jemanden triffst ohne lächeln, schenke ihm deins !!!"

MS Office 2016 Pro  32bit - Win 10 Pro 64 bit
Haftungshinweis: Trotz sorgfältiger inhaltlicher Kontrolle übernehmen ich keine Haftung für die Inhalte externer Links. Für den Inhalt der verlinkten Seiten sind ausschließlich deren Betreiber verantwortlich.
Antworten 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
Antworten 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
Antworten 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!!!
Grüße aus Bremen
Bernie

"Wenn du jemanden triffst ohne lächeln, schenke ihm deins !!!"

MS Office 2016 Pro  32bit - Win 10 Pro 64 bit
Haftungshinweis: Trotz sorgfältiger inhaltlicher Kontrolle übernehmen ich keine Haftung für die Inhalte externer Links. Für den Inhalt der verlinkten Seiten sind ausschließlich deren Betreiber verantwortlich.
Antworten Top
#37
Hallo Bernie,

(04.03.2015, 14: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
Antworten Top
#38
Hi Bernie,

(04.03.2015, 14: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!
Antworten Top
#39
Hallo Atilla,

(04.03.2015, 12: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
Antworten Top


Gehe zu:


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