VBA - for each wertet Elemente in falscher Reihenfolge aus

-]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:
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
Die Funktion läuft super. Die Schleife
  • 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
und
  • 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?
 
For Each X.... ist buchstäblich "für alle Elemente aus X, tu... " . Ordnungen fallen dort komplett raus. Es wird einfach alles genommen, was da ist.

Ist die Reihenfolge relevant, mußt Du For i = X To Y ... nehmen und dann auf den Steuerelementen eine Ordnung haben. Wenn ich das richtig lese, hast Du die ja schon.
 
Zurück
Oben