Das Thema Ebenen spielt bei Zellen eine etwas andere Rolle als bei Pseudozellen oder auch einfachen graphischen Elementen.Und zwar hat eine Zelle (Typ 2) historisch gesehen keine Information über eine Ebene, d.h. die Zelldefinition selber befindet sich praktisch auf keine Ebene, wohl aber die Elemente einer Zelle.Allerdings wird eben dieser Elementtyp 2 auch zur Darstellung anderer Elemente wie beispielsweise SmartSolids verwendet. Diese Elemente haben allerdings eine Ebeneninformation zugewiesen.Im VBA haben wir damit das Problem, dass wir für SmartSolids die Ebeneninformation anders auslesen müssen als im Vergelich zu anderen Elementtypen.
Auch hier kann uns der Objekttyp Propertyhandler behilflich sein, um die Ebeneninformation von SmartSolid Elementen auszulesen.
Hier dazu ein Beispiel, wie dies bei beliebig verschachtelten Zellkonstruktionen aussehen könnte, die teilweise mit SmartSolids audgebaut sind.Gestartet wird die Routine getLevelnamesFromSmartSolid, nachdem die zu untersuchenden Elemente gewählt wurden. Diese Routine verwendet eine Hilfsroutine FindNested, die rekurisv bis zur letzten Verschachtelungstiefe aufgerufen wird.
Sub getLevelnamesFromSmartSolid() Dim Ee As ElementEnumerator Set Ee = ActiveModelReference.GetSelectedElements Do While Ee.MoveNext Call FindNested(Ee.Current) Loop End Sub Sub FindNested(oEle As element) Dim Ee As ElementEnumerator Dim oPH As PropertyHandler Dim lvname As String If oEle.IsComplexElement Then If oEle.IsSmartSolidElement Then Set oPH = CreatePropertyHandler(oEle) If oPH.SelectByAccessString("Level") Then lvname = oPH.GetDisplayString End If Debug.Print "SmartSolid of type: " & str(oEle.Type) & ", Levelname: " & lvname Else Set Ee = oEle.AsComplexElement.GetSubElements Do While Ee.MoveNext Call FindNested(Ee.Current) Loop End If Else If oEle.IsGraphical Then 'Debug.Print "Element of type: " & Str(oEle.Type) & ", Levelname: " & oEle.Level.Name End If End If End Sub
Property Handler benutzen
Ändern von Elementeigenschaften mit Propertyhandler