Mit VBA Modelle automatisiert umbenennen


 Produkt(e):MicroStation
 Version(en):08.11.09.578
 Umgebung:Windows 7 64 bit
 Produktbereich:Programmierung
 Produktunterbereich:VBA

Hintergrundinformation

Durch eine Reorganisation von Datenstrukturen oder Angleichung von Daten kann es notwendig sein, dass größere Zeichnungs- und Bibliotheksbestände umbenannt werden müssen, beispielsweise Modellnamen.
Mit Hilfe von VBA kann dies automatisiert durchgeführt werden.

Erforderliche Schritte

Ich möchte hier ein allgemeines Beispiel vorstellen, das leicht auf die eigenen Bedürfnisse angepasst werden kann, da die vorzunehmenden Umbenennungen der Modelle in einer Textdatei festgelegt werden. Die VBA Routine kann beliebig auch im Batchbetrieb angewendet werden.
Um eine Übersicht zu erhalten, inwieweit die Umbenennungen durchgeführt werden konnten, wird eine Protokolldatei mitgeführt, in der jede einzelne Umbenennung aufgezeichnet wird.
Die angesprochene Textdatei mit den Umbenennungen muss 2 Spalten enthalten, die erste Spalte gibt den alten Namen und die zweite Spalte den neuen Namen des Modells an, als Trennzeichen ist ein ">" Größer Zeichen zu verwenden, dieses Zeichen kann nicht in einem Modellnamen verwendet werden.
Die Textdatei wird dem VBA Programm über eine Konfigurationsvariable mitgegeben, der Name der VAriablen lautet MODRENAME und kann beispielweise so definiert sein:
MODRENAME = D:/Daten/modremanetextdatei.txt

Eine Zeile aus dieser Datei könnte beispielsweise so aussehen, die Anzahl der Zeilen ist nicht begrenzt:

Default     >     neuer Name

Es dürfen sich zwischen den Spalten auch beliebig Leerzeichnen befinden, diese werden entfernt. Bei der Prüfung des Namens wird nicht auf Großschreibung geachtet, jedoch wird die zweite Spalte wie in der Textdatei geschrieben verwendet.

Damit der alte Name nicht ganz verloren geht, wird dieser in das Beschreibungsfeld eines Modells geschrieben.

Hier nun das Beispiel, das noch eine Hilfsfunktion hat, in der die Textdatei geprüft wird, ob der jeweilige Modellname vorhanden und geändert werden soll:

Private newName As String

Sub modrename()
Dim pfad As String
Dim oMod As ModelReference
If Not ActiveWorkspace.IsConfigurationVariableDefined("MODRENAME") Then
    MsgBox "Konf.-variable MODRENAME ist nicht definiert"
    Exit Sub
End If
pfad = ActiveWorkspace.ConfigurationVariableValue("MODRENAME", True)
        Open pfad + ".log" For Append As #1
        Print #1, "MOdelle umbenennen in: " + ActiveDesignFile.FullName
        Print #1, "_______________________________________________"
        Close #1
For Each oMod In ActiveDesignFile.Models
    newName = ""
    If renameOK(oMod.Name) Then
        Open pfad + ".log" For Append As #1
          Print #1, oMod.Name + " umbenannt nach: " + newName
        Close #1
        oMod.Description = oMod.Name
        oMod.Name = newName
    Else
        Open pfad + ".log" For Append As #1
          Print #1, oMod.Name + " nicht umbenannt"
        Close #1
       
    End If
Next
End Sub

Function renameOK(testname As String) As Boolean
Dim pfad As String
Dim zeile As String
Dim l() As String
renameOK = False
pfad = ActiveWorkspace.ConfigurationVariableValue("MODRENAME", True)
Open pfad For Input As 1
Do While Not (EOF(1))
    Line Input #1, zeile
    l = Split(zeile, ">")
    If UBound(l) - LBound(l) = 1 Then
        Debug.Print UCase(Trim(l(LBound(l))))
        If UCase(Trim(l(LBound(l)))) = UCase(testname) Then
            newName = Trim(l(UBound(l)))
            renameOK = True
            Exit Do
        End If
    End If
Loop
Close #1
End Function

  

 Ursprünglicher Autor:Artur Goldsweer