Mit VBA Text aus Zellen löschen


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

 

Problembeschreibung

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.