Добрый день!
Недавно начал знакомится с VBA, и как результат написал свой первый код.
В двух словах о задаче которую выполняет данный код:
Имеется N количество файлов DWG, в каждом файле N количество листов, на каждом листе расположен блок "Штамп основной надписи".
Текстовые надписи в "Штампе" реализованы как Атрибуты.
Задача кода, Открыть выбранный файл DWG --- Найти в этом файле блок "Штамп" --- Заменить Текст Атрибутов на значения из таблицы Exel.
Собственно представленный код решает эту задачу.
Просьба моя состоит в следующем:
Так как я совсем новичок в VBA, кропотливым трудом я код написал и он работает, но хотелось бы довести его до ума, в плане оптимизации и различных проверок на ошибки в ходе выполнения.
Взгляните пожалуйста опытным взглядом, и набросайте советов. Очень нужен взгляд со стороны.
Public Sub Object_DATA()
'Создаем список файлов
Dim FileName As Variant
Dim x As Variant
Dim Acad As Object
On Error Resume Next
Set Acad = CreateObject("AutoCAD.Application")
FileName = Sheets("Content").Range("A2:A12")
'Открываем файл DWG
For x = LBound(FileName) To UBound(FileName) 'Начинаем цикл: открыть DWG - Изменить атрибуты - сохранить и закрыть DWG
With Acad.Documents
.Open FileName(x, 1)
End With
'Выбираем в открытом чертеже нужный блок
Dim sset As AcadSelectionSet
Dim modeX(0) As Integer
Dim modeY(0) As Variant
Dim Name As String
Dim objEnt As AcadEntity
Name = "ДП_штамп2"
modeX(0) = 2
modeY(0) = Name
Acad.ActiveDocument.SelectionSets("SS2").Delete
Set sset = Acad.ActiveDocument.SelectionSets.Add("SS2")
sset.Select acSelectionSetAll, , , modeX, modeY
'Создаем массив данных из Exel
Dim attEx As Variant
Dim i As Variant
Dim k As Variant
attEx = Sheets("Object").Range("B2:C27")
'Получаем атрибуты и изменяем их значения
For Each objEnt In sset
If objEnt.HasAttributes = True Then
att = objEnt.GetAttributes
For i = LBound(att) To UBound(att)
For k = LBound(attEx) To UBound(attEx)
If att(i).TagString = attEx(k, 1) Then
att(i).TextString = attEx(k, 2)
End If
Next k
Next i
End If
Next
'Сохраняем и закрываем чертеж
Acad.Documents.Save
Acad.Documents.Close
Next x 'Завершаем цикл: открыть DWG - Изменить атрибуты - сохранить и закрыть DWG
End Sub