Die in MicroStation vorhandene Funktionalität zum Suchen und Ersetzen bietet viele Möglichkeiten und Varianten.Allerdings gibt es immer wieder Fälle, in denen ein erheblicher Aufwand betrieben werden muss, wenn größere Zeichnungsbestände verändert werden müssen und dabei gleichzeitig mehrere Ersetzungen vorgenommen werden müssen.Diese Serie von Beispielen soll verschiedene Probleme ansprechen, die bei diesem Thema anfallen können.Beginnen möchte ich mit einem einfachen Beispiel und später verschiedene Optionen hinzufügen, um möglichst viele Aspekte abzudecken.
Folgendes Beipiel durchsucht das aktive Modell und sucht nach Text, der beim Start der VBA Routine als 1. Parameter mitgegeben wurde.Wenn dieser Text gefunden wird, wird er durch den Text erstzt, der als 2. Parameter mitgegeben wurde.Um die Parameter beim Aufruf sauber trennen zu können, benutze ich das Pipe Zeichen "|" als Trennsymbol.
Hier nun ein Beispiel, wie dies gemacht werden könnte:
Option Explicit Sub TxtRep_simple() Dim sToFind As String ' zu suchender Text Dim sToReplace As String ' mit diesem Text zu ersetzen Dim CmdLine() As String Dim Ee As ElementEnumerator Dim Sc As New ElementScanCriteria ' als Trennzeichen zwischen den Parametern wird "|" angenommen CmdLine = Split(KeyinArguments, "|") ' Abbruch, wenn falsche Parameter mitgegeben wurden: If UBound(CmdLine) <> 1 Then ' es wurden falsche Parameter mitgegeben MessageCenter.AddMessage "Text ersetzen: es wurden falsche Parameter mitgegeben, siehe Details", "Aufruf erfolgte mit: " + KeyinArguments, msdMessageCenterPriorityError Exit Sub End If sToFind = Trim(CmdLine(0)) '1.Parameter zu suchender Text sToReplace = Trim(CmdLine(1)) '2.Parameter der neue Text 'aktuelles Modell nach Texten durchsuchen und prüfen: Sc.ExcludeAllTypes Sc.IncludeType msdElementTypeText Set Ee = ActiveModelReference.Scan(Sc) Do While Ee.MoveNext With Ee.Current.AsTextElement If .Text = sToFind Then .Text = sToReplace .Rewrite End If End With Loop End Sub
Wenn diese Routine geladen ist, kann es mit folgender Syntax gestartet werden:
vba run TxtRep_simple Suchtext | Ersetztext
Möchte man besipielsweise den Text "Haus" durch "Schuppen" ersetzen, könnte man es so aufrufen:vba run TxtRep_simple Haus|Schuppen
D.h. es wird nach "Suchtext" in der Zeichnung gesucht und durch "Ersetztext" ersetzt.Zu bedenken bei diesem Beispiel ist, dass die Schreibweise exakt sein muss, d.h. also die Groß-Kleinschreibung des zu suchenden Textes muss exakt stimmen, damit es gefunden wird.Außerdem wird nur ersetzt, wenn das gesamte Wort übereinstimmt.Gesucht wird im aktiven Modell und es werden nur Texte geprüft, die direkt gefunden werden, also auch keine Texte in Textknoten oder Zellen.
Direkt zum nächsten Teil:
Mit VBA Text ersetzen - Teil2: komplexe Strukturen