Bezieht sich auf | |||
Produkt(e): | MicroStation | ||
Version(en): | V8i, CONNECT Edition | ||
Umgebung: | Windows 7, 8,8.1, 10 | ||
Produktbereich: | Programmierung | ||
Produktunterbereich: | VBA | ||
Ursprünglicher Autor: | Artur Goldsweer, BDN | ||
Oftmals sind Änderungen nicht nur an einzelnen Zeichnungen notwendig, sonders dies betrifft oftmals eine größere Menge von Dateien, die man gerne in einem Schritt abarbeiten möchte.
Eine Automatisierung mit VBA kann hierbei sehr hilfreich sein, wenn beispielsweise die betroffenen Dateien in Listenform vorliegen.
Ich möchte hier ein Beispiel zeigen, wie man mit wenigen Schritten in VBA nacheinander alle Dateien einer solchen Liste abarbeiten kann.
Dabei gehe ich davon aus, dass die Dateinamen in einer Textdatei vorliegen, wobei jede Zeile der Textdatei dabei den vollen Pfad inklusive Dateinamen enthält, etwa ansatzweise so:
D:\DGN\Datei1.dgn
C:\DGN1\datei2.dgn
E:\TEST\Datei3.dgn
...usw.
Die Vorgehensweise dieses VBA Beispiels ist jetzt so, dass folgende Schritte ausgeführt werden:
- Öffnen der Textdatei mit Dateinamen zum Lesen
- In einer Schliefe (do while..) werden nacheinander alle Zeilen der Datei gelesen
- Wenn die gelesene Zeile den Namen einer gültigen Datei enthält, wird diese mit einer Hilfsroutine geöffnet und verarbeitet.
Das Ganze könnte dann etwa so aussehen:
Option Explicit Sub processFiles() Dim sPath As String Dim sListName As String Dim sCurrentFile sCurrentFile = ActiveDesignFile.FullName ' aktuell geöffnete Datei ' festeglegter Pfad zur Textdatei mit Liste der zu verarbeitenden DGN Dateien: sListName = "D:\DGN\filelist.txt" Open sListName For Input As #1 Do While Not EOF(1) Line Input #1, sPath sPath = Trim(sPath) If Len(Dir(sPath)) > 0 Then ' einfach Prüfung ob DGN Datei existiert process sPath End If Loop OpenDesignFile sCurrentFile, False ' am Ende die Datei öffnen, die vorher offen war End Sub ' diese Hilfsroutine öffnet die jeweilige DGN Datei Sub process(sPath As String) Dim oDgn As DesignFile Set oDgn = OpenDesignFile(sPath, False) ' Hier sind die Schritte einzufügen, ' die für jede DGN Datei auszuführen sind End Sub
Ich möchte hier anmerken, dass die Methode OpenDesignFile nacheinander die aktiv geöffnete Datei wechselt. Dies kann bei sehr großen Dateien die Performance mindern.
Abhelfen kann hier oftmals die Umstellung auf die Methode OpenDesignFileForProgram. Dies ist eine sehr hilfreiche Funktion, die es erlaubt, neben der aktiv geöffneten Datei noch eine weitere Datei nur zum "Programmieren" zu öffnen. Dies erhöht sehr stark die Performance und es ist auch für den Anwender angenehm, nicht ständig wechselnde Dateien zu sehen.
Allerdings kann dies nicht pauschal immer eingesetzt werden, da es nicht in die gewohnten Ansichten geöffnet wird und deshalb dazu keine Änderungen unterstützt.
Beim pauschalen Ändern von Texten in Texten, Textknoten, Sachdaten oder Zellen kann es aber beispielweise eingesetzt werden.