Тема: Пакетная замена текста в DWG-файлах (без открывания файлов)

1.Расположить все обрабатываемые чертежи в одном фолдере и запомнить его полное имя.
2.Подключить к приложенному макросу библиотеку: AutoCAD/ObjectDBX Common 16.0 Type Library.
Код разрабатывался на базе AutoCAD2004.
3. Запустить макрос и в ответ на запросы ввести последовательно:
- текст подлежащий замене
- новый текс
- имя фолдера

Option Explicit
'References -> AutoCAD/ObjectDBX Common 16.0 Type Library
Dim OldText As String
Dim NewText As String
Dim DirName As String
Sub vMain()
    OldText = InputBox("Enter text for replace:", "Batch Job")
    NewText = InputBox("Enter new text:", "Batch Job")
    DirName = InputBox("Enter full name of folder:", "Batch Job")
    Dim fName As String
    Dim FullName As String
    fName = DirName & "*.dwg"
    fName = Dir(fName)
    FullName = DirName & fName
    Call FileAccess(FullName)
    Do While fName <> ""
        fName = Dir()
        FullName = DirName & fName
        Call FileAccess(FullName)
    Loop
End Sub
Private Sub FileAccess(FullName As String)
    Dim MainDoc As AxDbDocument
    On Error Resume Next
    Set MainDoc = New AXDBLib.AxDbDocument
    MainDoc.Open (FullName)
    Call FileProcessing(MainDoc)
    MainDoc.SaveAs (MainDoc.Name)
    Set MainDoc = Nothing
End Sub
Private Sub FileProcessing(MainDoc As AxDbDocument)
    Dim MS As AcadModelSpace
    Set MS = MainDoc.ModelSpace
    Dim vEntity As AcadEntity
    Dim i As Integer
    Dim entObjectID As Long
    Dim tempObj As AcadObject
On Error Resume Next
For i = 0 To MS.Count
     entObjectID = MS.Item(i).ObjectID
     Set tempObj = MainDoc.ObjectIdToObject(entObjectID)
     If (TypeOf tempObj Is AcadText) Then
        If (tempObj.textString = OldText) Then
            tempObj.textString = NewText
        End If
     End If
Next i
End Sub

Re: Пакетная замена текста в DWG-файлах (без открывания файлов)

Несколько моментов, связанных именно с ObjectDBX - посмотри мой рассказ о Некоторых особенностях ObjectDBX

Re: Пакетная замена текста в DWG-файлах (без открывания файлов)

> Кулик Алексей aka kpblc
Спасибо, будем иметь в виду.

Re: Пакетная замена текста в DWG-файлах (без открывания файлов)

Решения по редактированию множества чертежей встретил в книге Дэн Эбботт "AutoCAD: секреты, которые должен знать каждый пользователь". Он предлагает использовать связку из командного файла (.bat), файла пакета (.scr) и файла autolisp.
Вот краткая выписка из его книги о командном файле: FOR %%f in (C:\Sybex\DWG\*.dwg) DO START /WAIT C:\"Program Files"\"AutoCAD 2007"\acad.exe "%%f" /b C:\Sybex\wbout.scr
Описание данного командного файла: FOR (Для) каждого файла, представленного замещаемым параметром %%f, находящегося в папке C:\Sybex\DWG, DO (Проделать) следующее: START (Запустить) приложение Windows и WAIT (Ждать) завершения его работы, прежде чем продолжить для следующего файла в директории. Приложением Windows является программа acad.exe. Когда она запускается, загружается файл чертежа, имя которого представлено замещаемым параметром %%f, и выполняется файл пакета wbout.scr, находящийся в папке C:\Sybex\