Bezieht sich auf | |||
Produkt(e): | MicroStation | ||
Version(en): | ab Version 8.5, auch CONNECT Edition | ||
Umgebung: | Windows 10 | ||
Produktbereich: | Programmierung | ||
Produktunterbereich: | VBA | ||
Ursprünglicher Autor: | Artur Goldsweer, BDN Support | ||
In der Anwendung tritt häufig der Wunsch auf, dass Zellen im Nachhinein verändert müssen. Dies können Änderungen in den Attributen oder Geometrie sein, was auch per VBA gemacht werden kann.
In diesem Beitrag möchte ich allerdings auf eine besondere VBA Funktion hinweisen, mit der man Elemente aus Zellen entfernen kann. Die VBA Methode lautet .DeleteCurrentElement.
Schritte zur Problembehebung
Die VBA Hilfe enthält ein Beispiel, das ich als Grundlage für dieses VBA Beispiel genommen habe.
In der Praxis sind Änderungen häufig pauschal an allen Zellen in allen Zeichnungen eines Projektes durchzuführen.
Deshalb ist es so erweitert, dass es nun in allen Zellen des aktiven Modells nach Texten sucht und den Inhalt des Textes auf Übereinstimmung prüft. Stimmt der Inhalt überein, wird der Text aus der Zelle entfernt.
Damit kann die Routine auch in der Stapelverarbeitung eingesetzt werden, um ein ganzes Projekt abzuarbeiten.
Option Explicit Sub DeleteFromCell() Dim ee As ElementEnumerator Dim sc As New ElementScanCriteria Dim oCell As New ElementScanCriteria 'Suchfilter auf Zellen einstellen sc.ExcludeAllTypes sc.IncludeType msdElementTypeCellHeader 'Suchfilter anwenden und suchen Set ee = ActiveModelReference.Scan(sc) 'Gefundene Elemente nacheinander prüfen Do While ee.MoveNext DeleteText ee.Current Loop End Sub ' Hilfsroutine zum Prüfen einer Zelle auf enthaltene Texte und ggfs. aus Zelle löschen ' Das Gerüst dieser Routine stammt aus der VBA Hilfe von MicroStation Sub DeleteText(ele As CellElement) ele.ResetElementEnumeration Do While ele.MoveToNextElement(True) Dim eleTemp As element Set eleTemp = ele.CopyCurrentElement If eleTemp.IsTextElement Then 'Wenn Textinhalt übereinstimmt, kann dies gelöscht werden If eleTemp.AsTextElement.Text = "Entfernen" Then ele.DeleteCurrentElement End If End If Loop ele.Rewrite End Sub
Genauso wie Textelemente können mit dieser Methode auch beliebig andere Elementtypen gesucht, auf entsprechende Eigenschaften überprüft und entfernt werden.