Подскажите новичку, что стоит оптимизировать в представленном коде.

Автор Тема: Подскажите новичку, что стоит оптимизировать в представленном коде.  (Прочитано 4830 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн podvesko.dsАвтор темы

  • ADN OPEN
  • Сообщений: 1
  • Карма: 0
Добрый день!

Недавно начал знакомится с VBA, и как результат написал свой первый код.
В двух словах о задаче которую выполняет данный код:
 Имеется N количество файлов DWG, в каждом файле N количество листов, на каждом листе расположен блок "Штамп основной надписи".
  Текстовые надписи в "Штампе" реализованы как Атрибуты.
Задача кода, Открыть выбранный файл DWG --- Найти в этом файле блок "Штамп" --- Заменить Текст Атрибутов на значения из таблицы Exel.

Собственно представленный код решает эту задачу.
Просьба моя состоит в следующем:
   Так как я совсем новичок в VBA, кропотливым трудом я код написал и он работает, но хотелось бы довести его до ума, в плане оптимизации и различных проверок на ошибки в ходе выполнения.
   Взгляните пожалуйста опытным взглядом, и набросайте советов. Очень нужен взгляд со стороны.

Код - Visual Basic [Выбрать]
  1. Public Sub Object_DATA()
  2.  
  3.     'Создаем список файлов
  4.    Dim FileName As Variant
  5.     Dim x As Variant
  6.     Dim Acad As Object
  7.         On Error Resume Next
  8.     Set Acad = CreateObject("AutoCAD.Application")
  9.     FileName = Sheets("Content").Range("A2:A12")
  10.    
  11.     'Открываем файл DWG
  12.    For x = LBound(FileName) To UBound(FileName)   'Начинаем цикл: открыть DWG - Изменить атрибуты - сохранить и закрыть DWG
  13.        With Acad.Documents
  14.         .Open FileName(x, 1)
  15.         End With
  16.  
  17.     'Выбираем в открытом чертеже нужный блок
  18.    Dim sset As AcadSelectionSet
  19.     Dim modeX(0) As Integer
  20.     Dim modeY(0) As Variant
  21.     Dim Name As String
  22.     Dim objEnt As AcadEntity
  23.    
  24.     Name = "ДП_штамп2"
  25.     modeX(0) = 2
  26.     modeY(0) = Name
  27.    
  28.     Acad.ActiveDocument.SelectionSets("SS2").Delete
  29.     Set sset = Acad.ActiveDocument.SelectionSets.Add("SS2")
  30.     sset.Select acSelectionSetAll, , , modeX, modeY
  31.    
  32.     'Создаем массив данных из Exel
  33.    Dim attEx As Variant
  34.     Dim i As Variant
  35.     Dim k As Variant
  36.     attEx = Sheets("Object").Range("B2:C27")
  37.    
  38.     'Получаем атрибуты и изменяем их значения
  39.    For Each objEnt In sset
  40.         If objEnt.HasAttributes = True Then
  41.             att = objEnt.GetAttributes
  42.                 For i = LBound(att) To UBound(att)
  43.                 For k = LBound(attEx) To UBound(attEx)
  44.                     If att(i).TagString = attEx(k, 1) Then
  45.                     att(i).TextString = attEx(k, 2)
  46.                     End If
  47.                 Next k
  48.                 Next i
  49.         End If
  50.     Next
  51.    
  52.    'Сохраняем и закрываем чертеж
  53.    Acad.Documents.Save
  54.     Acad.Documents.Close
  55.    
  56.     Next x                                   'Завершаем цикл: открыть DWG - Изменить атрибуты - сохранить и закрыть DWG
  57.    
  58. End Sub



Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Взгляните пожалуйста опытным взглядом, и набросайте советов.
У меня только один совет - не использовать VBA. Всё остальное сложно оптимизировать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение