Autor: Peter Haserodt  --- Aus Excel VBA - Gruppe: Tutorials

Objekte (4) - Parent

Autor: Peter Haserodt - Erstellt: --      - Letzte Revision: --Gruppenthema: 4 Folgen 1 2 3 4 Sie sind in Folge:4
Parent - der die das Elter

Bevor Sie meine Pisatauglichkeit (durchaus zu Recht) anzweifeln und meinen, der ist auch lter geworden, schnell eine biologische Erklärung - oh oh.

Auch im Leben gibt es Wesen, die keine Eltern haben sondern nur ein Elter. Also nicht Vater und Mutter sondern eine Art Vutter.
Ein Elter kann immer mehrere Kinder haben, aber ein Kind immer nur ein Elter.

Genauso ist es mit Objekten. In VBA sprechen wir hier von einem Parent = Elter.
(Parents = Eltern -> Parent = Elter)

Betrachten wir uns dies in Excel an einem Beispiel:
Nehmen wir uns ein Worksheet. Dieses Worksheet kann nur ein Elter haben, nämlich das Workbook, in welchem es sich herumtummelt.
... Kinder dagegen viele und zwar sogar von verschiedenen Typen. (Hier meine ich nicht von verschiedenen Vätern )

Zum Beispiel Zellen. Jede einzelne Zelle ist ein Kind des Worksheets aber auch Shapes sind Kinder des Worksheets - somit haben wir Kinder, die zwar ein gemeinsames Elter haben aber nicht typengleich sind.

Bevor ich Sie jetzt aber noch mit Großelter oder Enkelkind malträtiere, erstmal ein Codebeispiel.
Nehmen Sie sich dazu eine leere Mappe und zeichnen Sie irgendein Objekt im ersten Tabellenblatt.
Dann folgenden Code in ein allgemeines Modul der Mappe:
Public Sub ElterEins()
Dim oBlatt As Worksheet
Set oBlatt = ThisWorkbook.Worksheets(1)
With oBlatt
   MsgBox "Parent des Range: " & .Range("a1").Parent.Name
   If .Shapes.Count = 0 Then
      MsgBox "Hey - wo ist das Shape"
   Else
      MsgBox "Parent des Shape: " & .Shapes(1).Parent.Name
   End If
   MsgBox "Parent des Worksheet: " & .Parent.Name
End With
End Sub
Diese kleine Sub zeigt uns, dass wir zwei verschiedenen Typen mit dem gleichen Parent haben.
Sowie dass unser Worksheet selbst natürlich ein anderes Parent hat, nämlich das Workbook.

Parent - das UvO
(Unbekanntes vielfältiges Objekt)

Betrachten wir nun das Parent genauer.
Vielleicht ist es Ihnen schon aufgefallen: Sie können wie wild auf die Punkt-Taste hinter der Eingabe Parent hämmern, nichts passiert. Die Intellisense springt nicht an. Es werden Ihnen keine Eigenschaften oder Methoden des Objektes vorgeschlagen.

Dies ist nun leicht erklärbar:
Wir haben ja oben gesehen, dass das Parent-Objekt von verschiedener Natur sein kann. In unserem Beispiel war es mal ein Workbook, mal ein Worksheet.
Somit kann der VBA-Editor auch keine Eigenschaften und Methoden anbieten, da ja der Typ unbekannt ist. Sie müssen also alles selber wissen und selber schreiben .
Das Parent Objekt stellt immer die Eigenschaften und Methoden zur Verfügung,welches das Objekt hat, auf das es verweist.
z.B.:
ActiveSheet.Parent
Hier hat nun das Parent alle Eigenschaften und Methoden eines Workbooks und wir können darauf zugreifen, z.B. ActiveSheet.Parent.Sheets.Count gibt uns die Anzahl aller Blätter des Workbooks zurück, zu welchem das ActiveSheet gehört.


Parent - Wofür ist es nun gut?

Das sollte mittlerweile schon klar geworden sein.
Allein im letzen Absatz haben wir gesehen, wie ich durch ActiveSheet.Parent auf Informationen zugreifen kann, in welchem Workbook das ActiveSheet ist. Dies ist in vielen Dingen sehr nützlich.
Auch das Parent des Range Objektes, das Parent des Selection Objektes, ach, das Parent von vielen Objekten ist einfach sinnvoll, nützlich und super. Sie müssen nur ein wenig damit arbeiten und die Vorteile werden sich Ihnen erschließen.

Opa Uropa UrUropa ...

Natürlich geht das Parent nach oben. Z.B.:
Range("A1:A4").Parent.Parent verweist auf das Workbook Objekt. Das erste Parent wäre hier das Worksheet und das Zweite das Workbook.
Und was kommt danach?
Yep, hier wäre das Application Objekt das nächsthöhere und dann?

Hier kommen wir zu einem Problem. Es wird hier leider nicht einfach Schluss gemacht, sondern das Parent des Application Objektes ist wieder das Applicaton Objekt usw usw usw.

Der Nachteil ist klar, ich kann nicht nach oben durchschleifen, bis es kein Parent mehr gibt.

Bedenken Sie aber auch, dass dieses Application Objekt ja gar nicht Excel sein muss, wenn ich irgenwo z.B. mit Word ein bisserl rumgespielt habe - aber dies führt jetzt zu weit.

Wenn Sie mit dem Parent experimentieren, ist es sehr sinnvoll, sich den TypeName ausgeben zu lassen. Bsp.:
MsgBox TypeName(ActiveSheet.Parent)
(Auch wenn man es vermuten könnte, aber nicht alle Objekte haben z.B. eine Name Eigenschaft, so dass xxx.Parent.Name auch einen Fehler produzieren kann. Aber dies wissen wir ja schon, wir müssen wissen / uns erarbeiten von welchem Typ das Parent ist.

Parent - verlasse dich nie auf die Erbfolge

Gehen Sie niemals von alleine davon aus, dass ein Objekt immer den gleichen Parenttypen hat.
Dies muss nicht sein.
Ein kleines Beispiel:

Sie haben eine UserForm (UserForm1) und dort ein Steuerelement, nehmen wir zum Spass mal eine TextBox (TextBox1).
Mit: MsgBox TextBox1.Parent.Name erwarten Sie nun sicherlich als Ergebnis UserForm1.
Das wird auch so sein, wenn ?
Ja wenn die Textbox nicht in einem Frame liegt. Denn dann ist das Parent der TextBox nicht mehr die UserForm sondern der Frame.

Zum Abschluss

Ich hoffe ich konnte Ihr Interesse für das Parent Objekt wecken.
Aber bitte sprechen Sie von Ihren Eltern in Zukunft nicht als Vutter.
Dies könnte dann doch missverständlich sein.


Dieses Thema hat weitere Beiträge

Objekte (1) - Punktfrustration
Objekte (2) - Laufzeitfehler 438
Objekte (3) - Me
Objekte (4) - Parent

Weitere Artikel der Gruppe: Tutorials Aus Excel VBA
Nach oben