Ich versuche mich schon seit einiger Zeit leider erfolglos, Objekte einer UserForm, in diesem Falle Frames auch als Objekt in ein Array einzulesen. Hintergrund der ganzen Aufgabe ist, daß ich mit der Zeit immer mehr und komplexere UserForms erstellt habe, und ich das Layouting dieser UserForms über einen Code vereinheitlichen möchte. Da ein Frame in der Regel weitere Steuerelemente aufnimmt, muß ein Frame in seinen Parametern Top und Height immer vor der UserForm eingerichtet werden. Wenn ein Frame wiederum auf einem Frame liegt dann muß der zweite Frame, vor dem ersten Frame bearbeitet werden, usw. Ergo: Ich will die Schichten einer UserForm feststellen. Ich will in einer flexiblen Schleife feststellen, wie viele Schichten auf einer UserForm liegen und diese mit der höchsten Schachtelung beginnend abarbeiten.
Ich habe einmal eine Beispiel UserForm erstellt, um das Problem zu erläutern.
Es gibt zwei Frames, die direkt auf der UserForm liegen. Layer 1 hat als Child Layer 2, dieser wiederum als Child Layer 3. Dann kommt noch einmal Layer 01 direkt auf der UF, dieser hat nur ein Child Layer 02.
Ich möchte nun alle Controls der UF durchloopen, wenn festgestellt wird, daß ein Child existiert, soll geprüft werden, ob dieses Child wiederum Childs hat. Am Ende möchte ich für das Beispiel von oben kommend alle Namen auflisten, bis ich wieder bei der UF als Mutter aller Frames angekommen bin.
Die Reihenfolge (Ausgabe des Namens, z.B. über Debug.Print) wenn ich alle Frames direkt von der UserForm durchloopen lasse, ist:
UserForm
Layer 1
Layer 2
Layer 3
Layer 01
Layer 02
Die Reihenfolge für die Betrachtungsweise von oben kommend muß aber sein:
Layer 3
Layer 2
Layer 02
Layer 1
Layer 01
UserForm
Mit dieser Reihenfolge kann ich den Code für die Einrichtung aller controls und ihrer ChildItems auf der UserForm beginnen.
Ich habe schon an Collections gedacht, da diese meines Wissens nach Objekte gut aufnehmen können. Also steht als Wissensgewinn auch die generelle Frage im Raum, warum kann eine Collection ein Objekt aufnehmen, ein Array aber nicht? Oder habe ich, was ich vermute, in der Deklaration der Komponenten einen Fehler gemacht.
Und 2. Wie kann ich die Schichtung korrekt abbilden. Es fehlt mir der logisch stringente Gedankendurchbruch. Es hat mich gestern bis 23:30 Uhr beschäftigt, aber auch über Nacht kam keine zündende Idee.
Ich würde mich sehr freuen, wenn jemand von Euch mal einen Blick darauf werfen kann.
https://www.herber.de/bbs/user/64146.xls
Euch allen noch einen guten Start in den Tag!
Viele Grüße, Andreas Hanisch