-]Dr.OeTz![-
Lt. Junior Grade
- Registriert
- Nov. 2009
- Beiträge
- 509
Hallo Zusammen,
ich hoffe hier tummeln sich auch ein paar Leute, die mit VBA nicht so auf Kriegsfuß stehen wie ich
Folgende Aufgabe:
Gegeben ist ein Excel Dokument mit verschiedenen Abschnitten und ein Button "Drucken". Dieser Button ruft ein Formular mit Checkboxen auf. Anhand dieser Checkboxen kann ich auswählen, welche der einzelnen Abschnitte ausgedruckt werden sollen.
Also eigentlich exakt das Gleiche wie die Excelfunktion "Auswahl Drucken". Nur eben signifikant komfortabler in der Anwendung.
Meine Idee war jetzt folgende:
Die Funktion läuft super. Die Schleife
Dabei besteht aber folgendes Problem:
Ich kann nicht steuern, in welcher Reihenfolge die Checkboxen ausgewertet, denn die "For Each Schleife" geht die Checkboxen nicht in der Reihenfolge durch, wie sie dargestellt sind oder benannt wurden, sondern die Reihenfolge in der sie erstellt wurden. Füge ich also nachträglich einen neuen Abschnitt und eine Checkbox hinzu, wird der Bereich den sie für meinen Ausdruck definiert immer am Ende hinzugefügt und nicht da, wo ich ihn brauche.
Beispiel:
Ich will nun einen dritten Abschnitt, der zwischen Abschnitt 1 und 2 mit zusätzlichen Informationen bereitstellen.
Ich erstelle also Abschnitt 3 (Felder C1 und D1), Checkbox 3 und weise der Checkbox einen entsprechenden Bereich zu:
Gedruckt wird aber:
Abschnitt 1
Abschnitt 2
Abschnitt 3
Klar kann ich das umgehen, indem ich den Checkboxen neue Abschnitte/Bereiche zuweise, aber das ist ja nicht im Sinne des Erfinders.
Ich hoffe ich konnte mein Problem einigermaßen verständlich rüber bringen
Hat jemand eine Idee? Wie kann ich VBA dazu bringen, die Checkboxen in einer von mir festgelegten Reihenfolge durch zu gehen?
ich hoffe hier tummeln sich auch ein paar Leute, die mit VBA nicht so auf Kriegsfuß stehen wie ich
Folgende Aufgabe:
Gegeben ist ein Excel Dokument mit verschiedenen Abschnitten und ein Button "Drucken". Dieser Button ruft ein Formular mit Checkboxen auf. Anhand dieser Checkboxen kann ich auswählen, welche der einzelnen Abschnitte ausgedruckt werden sollen.
Also eigentlich exakt das Gleiche wie die Excelfunktion "Auswahl Drucken". Nur eben signifikant komfortabler in der Anwendung.
Meine Idee war jetzt folgende:
Code:
Private Sub CommandButton_Click()
Dim AuswahlBereich As String
Dim cnt As Integer
Dim contr As Control
For Each contr In DruckAuswahl.Controls
If TypeName(contr) = "CheckBox" Then
MsgBox contr.Name & " , " & contr.Caption
If contr.Value = True Then
cnt = cnt + 1
If cnt <> 1 Then
AuswahlBereich = AuswahlBereich & " , " & contr.Tag
Else
AuswahlBereich = AuswahlBereich & contr.Tag
End If
End If
End If
Next
Range(AuswahlBereich).PrintPreview
End Sub
- prüft ob eine Checkbox ausgewählt ist
- ließt den unter dem Attribut "Tag" hinterlegten Bereich aus (Bspw. "A1-BS36")
- Fügt diesen Wert der Variable "AuswahlBereich" hinzu
- erstellt am Ende die Durckvorschau
Dabei besteht aber folgendes Problem:
Ich kann nicht steuern, in welcher Reihenfolge die Checkboxen ausgewertet, denn die "For Each Schleife" geht die Checkboxen nicht in der Reihenfolge durch, wie sie dargestellt sind oder benannt wurden, sondern die Reihenfolge in der sie erstellt wurden. Füge ich also nachträglich einen neuen Abschnitt und eine Checkbox hinzu, wird der Bereich den sie für meinen Ausdruck definiert immer am Ende hinzugefügt und nicht da, wo ich ihn brauche.
Beispiel:
Code:
Abschnitt 1 = Checkbox 1 = Bereich A1:B1
Abschnitt 2 = Checkbox 2 = Bereich B2:B2
Ich will nun einen dritten Abschnitt, der zwischen Abschnitt 1 und 2 mit zusätzlichen Informationen bereitstellen.
Ich erstelle also Abschnitt 3 (Felder C1 und D1), Checkbox 3 und weise der Checkbox einen entsprechenden Bereich zu:
Code:
Abschnitt 1 = Checkbox 1 = Bereich A1:B1
Abschnitt 3 = Checkbox 3 = Bereich C1:D1
Abschnitt 2 = Checkbox 2 = Bereich B2:B2
Gedruckt wird aber:
Abschnitt 1
Abschnitt 2
Abschnitt 3
Klar kann ich das umgehen, indem ich den Checkboxen neue Abschnitte/Bereiche zuweise, aber das ist ja nicht im Sinne des Erfinders.
Code:
Abschnitt 1 = Checkbox 1 = Bereich A1:B1
Abschnitt 3 = Checkbox 2 = Bereich C1:D1
Abschnitt 2 = Checkbox 3 = Bereich B2:B2
Ich hoffe ich konnte mein Problem einigermaßen verständlich rüber bringen
Hat jemand eine Idee? Wie kann ich VBA dazu bringen, die Checkboxen in einer von mir festgelegten Reihenfolge durch zu gehen?