Тема: Пакетная замена текста в 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