Clever-Excel-Forum

Normale Version: VBA: Optionsbutton ja, dann Tabelle drucken
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4
Hallo Stefan,

wie schon erwähnt, habe wenig Erfahrung mit Checkboxen oder Optionbutton. Habe auch im Web nicht wirklich viel gefunden.

Zitat: Somit konnte ich nur eine Lösung mit Worksheets("Tabelle... entwickeln

Wo ist den deine Lösung?
Hallo Bernie,

ich habe unten eine Beispieldatei eingestellt.
In der Datei findest Du ein paar Erklärungen.

[attachment=1611]
Hallo Bernie,

das war doch nicht ganz durchdacht.
Bitte den gesamten Code hinter der Userform löschen und den unten stehenden einfügen:


Code:
Option Explicit

Private Sub CommandButton1_Click()
  Dim i As Long, lngZ As Long
  
  'alle Tabellen in Spalte D drucken
  With Sheets("alleTabellen")
    lngZ = .Cells(.Rows.Count, 4).End(xlUp).Row
    For i = 2 To lngZ
      Sheets(.Cells(i, 4).Value).PrintOut
    Next i
  
    'alle in der Listbox ausgewählten Tabellen drucken
    For i = 0 To Me.ListBox1.ListCount - 1
     If Me.ListBox1.Selected(i) = True Then Sheets(Me.ListBox1.List(i, 1)).PrintOut
  Next i
  End With
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
Hallo Bernie,

(27.02.2015, 23:05)Bernie schrieb: [ -> ]Wo ist den deine Lösung?

hast Du den Code aus den Beitrag 17 nicht gesehen?
Hallo Stefan,

leider komme ich erst jetzt dazu dir zu antworten.
Ich weiß nicht, ob ich alles richtig verstanden hatte mit deinem Codebeispiel.
Es sind insgesamt wohl 48 Tabellenblätter, die gedruckt werden sollen, davon 12 feste Tabellenblätter.
Die Arbeitsmappe enthält neben den auszudruckenden Tabellenblättern noch einige Tabellenblätter die als Hilfstabellen dienen und nicht ausgedruckt werden.
Code:
Private Sub CommandButton1_Click()
 
  Dim vntDruckeTab As Variant
  Dim lngC As Long
 
  vntDruckeTab = Array("AdrDeckblatt", "AdrInhalt", "AdrVorwor", "AdrVersCheck", "AdrBedarf", "AdrFirma", _
  "AdrPerson", "AdrBerufBank", "AdrPrivVers", "AdrPrivVersSach", "AdrEinkommen", "AdrVermögen")
 
  For lngC = 13 To 48
     If Me.Controls("CheckBox" & lngC).Value Then Worksheets("vntDruckeTab" & lngC + 12).PrintOut
  Next lngC
 
End Sub
So hatte ich dich verstanden!

Bekomme Fehlermeldung ...
Code:
("vntDruckeTab" & lngC + 12).PrintOut
..."Index außerhalb gültigen Bereichs".
Hallo Atilla,

ich habe den Eindruck, dass ich mich falsch ausgedrückt hatte. Ich verstehe leider nicht wie ich dein Beispiel auf meine Belange umrüsten kann. Bei mir wird ausschließlich aus den UserFormen gearbeitet. Tabelle sollen überhaupt nicht sichtbar sein.

Kurz zu meiner Vorstellung: In der Arbeitsmappe befinden sich Datentabellen und Drucktabellen. Jede Tabelle hat einen Namen. Ausgeruckt werden (aktueller Stand) immer 12, weitere 36 Tabellen (aktueller Stand) sollen zur Auswahl stehen und der Anwender soll die Auswahl in einer Userform treffen, nicht auf einem Tabellenblatt. Anschließend die Auswahl drucken und/oder Druckvorschau Analog der Mustertabelle.
Hallo Bernie,

(02.03.2015, 11:52)Bernie schrieb: [ -> ]Bekomme Fehlermeldung ...



Code:
("vntDruckeTab" & lngC + 12).PrintOut
..."Index außerhalb gültigen Bereichs".

so geht es auch nicht.

  1. vntDruckeTab ist eine Variable, die kannst Du nicht innerhalb von zwei Anführungszeichen verwenden.
  2. bei vntDruckeTab handelt es sich um ein Datenfeld, dessen Index in der Regel mit der 0 beginnt, ergo ist + 12 wenn die Schleife von 13 bis 48 geht, der falsche Weg.

Mache es 'so ähnlich'

Code:
(vntDruckeTab(lngC - 13)).PrintOut

so ähnlich deshalb weil deine Schleife von 13 bis 48 geht und somit 36 mal durchlaufen wird. Jetzt die Frage: Wieviele Elemente umfasst deine Vairable vntDruckeTab?

Code:
?Ubound(vntDruckeTab)

im Direktfenster und Du weißt Bescheid.
Hallo Stefan,

Code läuft durch, nimmt aber nur die neu angewählten Checkboxen ohne die festen 12 im Array. Wo ist mein Fehler?

Code:
Private Sub drucken_Click()
 
  Dim vntDruckeTab As Variant
  Dim lngC As Long
 
  vntDruckeTab = Array("Deckblatt", "Inhalt", "Vorwort", "Versicherungs-Check", _
       "Bedarfsanalyse", "Firmenvorstellung", "Personendaten", "Berufs- und Bankdaten", _
       "Private Kapitalversicherungen", "Private Sachversicherungen", _
       "Einnahmen und Ausgaben", "Vermögen und Verbindlichkeiten")
 
  For lngC = 13 To 48
     If Me.Controls("CheckBox" & lngC).Value Then Worksheets(vntDruckeTab(lngC - 13)).PrintOut
  Next lngC
 
End Sub
Hallo Bernie,

könntest Du bitte eine Datei mit den tatsächlichen Tabellennamen und einer Beschreibung welche immer und welche pro aktivierter Checkbox gedruckt werden sollen, hochladen?
Hallo Stefan,

die gelben Tabellen sind Datenablage, die grünen sollen gedruckt werden, davon sind die ersten 12 als feste Ausdruckvorgabe (1=Deckblatt und 12=Vermögen und Verbindlichkeiten) die restlichen grünen (können auch mit der Zeit noch mehr werden) sind wahlweise per Chechbox auszuwählen. Die roten sind Hilfstabellen und werden nicht ausgedruckt, ebenso wie die gelben.

hier die Musterdatei:
Seiten: 1 2 3 4