Последовательная обработка нескольких DGN-файлов одним макросом
В 99% случаев макрос, написанный нами на VBA для Microstation, используется непосредственно в том файле, в котором необходимо выполнить какие-то операции над элементами. Однако, периодически возникает необходимость использовать макрос для автоматической последовательной обработки сразу нескольких файлов за один раз.
Делается это очень просто:
Private Sub StartButton_Click() ' FilesList - это обычный ListBox Dim FileName As String Dim i As Long ' Переменные для статистики Dim AllFilesCount As Long Dim ErrorFilesCount As Long Dim SuccessFilesCount As Long ErrorFilesCount = 0 SuccessFilesCount = 0 AllFilesCount = FilesList.ListCount ' Проходим по всем файлам из списка For i = 0 To FilesList.ListCount - 1 FileName = FilesList.list(i) Debug.Print "Start process with: " & FileName ' Открываем очередной файл Dim oDgnFile As DesignFile Set oDgnFile = OpenDesignFile(FileName) ' Если файл не открылся - можем зафиксировать в дебаге If oDgnFile Is Nothing Then Debug.Print "Unable to open file '" & FileName & "'" ErrorFilesCount = ErrorFilesCount + 1 ' Файл успешно открыт и теперь мы можем работать в его контексте Else Debug.Print "Opened file '" & FileName & "'" SuccessFilesCount = SuccessFilesCount + 1 ' Например, можем собрать все шейпы из открытого файла Dim ShapesCount As Long Dim myScan As New ElementScanCriteria Dim myEnum As ElementEnumerator ShapesCount = 0 myScan.ExcludeAllTypes myScan.IncludeType msdElementTypeShape Set myEnum = ActiveModelReference.Scan(myScan) While myEnum.MoveNext ... Wend End If Next i MsgBox "Всего файлов: " & AllFilesCount & Chr(13) & _ "Ошибочных файлов: " & ErrorFilesCount & Chr(13) & _ "Корректных файлов: " & SuccessFilesCount, vbInformation End Sub
В общем ничего сверхъестественного нет: всё что нам нужно – это грамотно отработать результат выполнения функции OpenDesignFile, если она сработала корректно, то мы сразу же оказываемся в контексте только что открытого файла и можем спокойно оперировать его элементами.