Mit VBA Text ersetzen - Teil1: Einstieg


  
 Bezieht sich auf 
  
 Produkt(e):MicroStation
 Version(en):08.11.09.459
 Umgebung: Windows 7 64 bit
 Produktbereich: Programmierung
 Produktunterbereich: VBA
 Ursprünglicher Autor:Artur Goldsweer, Bentley Technical Support Group
  

 

Hintergrundinformation

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. 

Einfaches Beipiel zum Erstzen von Text im aktuellen Modell

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

Sehen Sie hierzu auch

Mit VBA Text ersetzen - Teil2: komplexe Strukturen