| 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.