Produkt(e): | MicroStation | ||
Version(en): | 08.11.09.578 | ||
Umgebung: | Windows 7 64 bit | ||
Produktbereich: | Programmierung | ||
Produktunterbereich: | VBA |
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.
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 |