Автоматизация рутинных операций между Excel и AutoCAD при помощи VBA
Уже не первый год я встречаю на профильных форумах мнение, что VBA для AutoCAD отмирает, и AutoDesk не будет его включать в следующих релизах в дистрибутив, и вообще, истинные падаваны пользуются lisp, C# и прочим, но только не VBA.
Я инженер-проектировщик ОВиК, не программист. И не хочу, да и некогда, вникать в серьезное программирование. Чаще всего появляется ситуация, что нужно как-то автоматизировать рутину здесь и сейчас. На помощь приходит простой язык VBA.
Далее я покажу, как можно без особых забот сделать самому то, за что серьезные ребята берут не плохие денежки. А именно перенос данных из Excel в AutoCAD и обратно. Заинтересованных прошу под кат.
Программировать будем на стороне Excel — мне так проще. Для подключения нужно войти в режим разработчика: Alt+F8 Либо можно открыть вкладку «разработчик» из настроек ленты.
В окне разработчика VBA входим в верхнее меню: Tools/References. В этом окне нужно поставить галочку на вашей версии AutoCAD
В моем случае это AutoCAD 2014 Type Library. Далее нужно в левом окне создать в вашей книге модуль, как на скриншоте (Module)
И в модуль вставляем нижеприведенный код:
Аналогичным способом можно создавать блоки с атрибутами, в которые можно вставлять текст из ячеек.
Нужно внести в верхний код изменения вроде:
Код обновления текста по хэндлу — написан ниже: ‘получаем хэндл из ячейки, в которую мы записали кодом выше.
entHandle = ActiveCell.Offset(0, 3).Value ‘получили наш блок по хэндлу
Set blockObj = acadDoc.HandleToObject(entHandle)
А дальше делаем всё то же самое, что и выше.
Для того, чтобы немного разъяснить как это работает вживую — записал видео:
Как видите, кода минимум, однако на больших объектах мне экономит по несколько часов работы. И снижается риск ошибки. Т.к. обычно это выглядит следующим образом у проектировщиков — открываются два окна на разных экранах, и или вручную, или через буфер обмена начинается заполнение выносок или блоков на чертеже.
Опять же чем хорош VBA — что он всегда под рукой 🙂 Excel-то основной инструмент у инженера.
Vba autocad что это
VBA может служить средством интеграции различных приложений, в которые встроена поддержка VBA. Таким образом, AutoCAD может управлять другими приложениями, например Microsoft Word или Excel, используя их библиотеки объектов.
Чтобы дополнить AutoCAD VBA такими компонентами, как модуль работы с внешними базами данных или средство подготовки отчетов, можно отдельно приобрести пакет Visual Basic 6, являющийся самостоятельным продуктом.
Процесс разработки с помощью AutoCAD VBA
Передача сообщений от VBA к AutoCAD осуществляется с помощью интерфейса AutoCAD ActiveX Automation Interface. С помощью макроса AutoCAD VBA среда Visual Basic может работать одновременно с AutoCAD и осуществлять программный контроль AutoCAD через интерфейс ActiveX Automation. Связка AutoCAD, ActiveX Automation и VBA является очень мощным средством программирования. Оно позволяет не только управлять объектами AutoCAD, но и обмениваться данными с другими приложениями.
Результатом интеграции VBA и AutoCAD является легкое в использовании средство визуального программирования, которое можно использовать для настройки AutoCAD. С его помощью можно, например, разработать приложение, которое автоматически извлекает значения атрибутов, вставляет результаты в книгу Excel и выполняет другие требуемые манипуляции с данными.
Принципы программирования на VBA для AutoCAD основываются на трех базовых составляющих. Первой составляющей является сама программа AutoCAD, которая обладает большим набором объектов, различных данных и команд. AutoCAD является приложением с открытой архитектурой и имеет интерфейсы различных уровней. Для эффективного использования VBA желательно иметь навыки программирования в среде AutoCAD. Однако следует отметить, что положенный в основу VBA объектно-ориентированный подход к программированию существенно отличается от используемого в AutoLISP.
Второй составляющей является интерфейс ActiveX Automation, который определяет порядок передачи сообщений (взаимодействия) с объектами AutoCAD. Программирование на VBA требует понимания принципов организации интерфейса ActiveX Automation. Описание интерфейса AutoCAD ActiveX Automation приведено в разделе справки Руководство для разработчиков ActiveX и VBA). Для отображения Справки для разработчиков следует щелкнуть на стрелке раскрывающегося списка, расположенной на панели инструментов «Инфоцентр» справа от кнопки «Справка». В появившемся меню выберите «Дополнительные ресурсы» 
Третьей составляющей является, собственно, сама среда VBA. VBA имеет свой собственный набор объектов, ключевых слов, констант и т.д., которые используются при написании, отладке и выполнении программ. В комплект поставки AutoCAD входит обширная справочная система по VBA от Microsoft.
Интерфейс ActiveX/VBA программы AutoCAD обладает рядом преимуществ по сравнению с другими интерфейсами API AutoCAD.
Программирование на VBA
Введение. Обзор команд. Объектная модель
Введение
Интерфейс AutoCAD ActiveX/VBA дает некотoрые преимущества по сравнению с другими методами создания приложений AutoCAD :
Понятие внедренных и глобальных проектов VBA
Загрузка существующего проекта
Определение компонентов проекта
Проект может состоять из различных компонентов:
Обзор команд VBA AutoCAD
Основные понятия объектной модели AutoCAD
Через объект Application можно получить доступ к следующим объектам:
Через объект Preferences можно получить доступ к следующим объектам
Через объект Documents можно получить доступ к объекту Document а через него к большинству других объектов и коллекций:
Доступ к иерархии объектов. Коллекции, свойства и методы
Когда используются глобальные проекты, ThisDrawing всегда ссылается на активный документ. При использовании внедренных проектов ThisDrawing всегда ссылается на документ, содержащий проект. Например, следующая строка кода в глобальном проекте сохраняет любой чертеж, который в данный момент активен:
Ссылка на объекты в иерархии объектов
Доступ к объекту можно получить непосредственно или через объектную переменную. Для непосредственной сслыки на объект достаточно указать полный путь к нему в иерархии. Например, следующий фрагмент кода добавляет линию в пространство модели:
Для доступа к объекту через объектную переменную поступаем следующим образом. Определяем переменную желаемого типа, после чего устанавливаем переменную так, чтобы она ссылалась на нужный объект. К примеру следующий код определит объектную переменную moSpace типа AcadModelSpace так, чтобы она ссылалась на текущее пространство модели :
Коллекции объектов
Доступ к коллекции
Добавление нового элемента коллекции
Следующий пример создает слой и добавляет его в коллекцию:
Перебор членов коллекции
Пример поиска слоя с именем ABC :
Удаление члена коллекции
Пример удаления слоя:
Удаленный объект восстановлению не подлежит.
Понятие свойств и методов
Понятие родительского объекта
Библиотеки типов
Описание объектов, свойств и методов хранятся в библиотеке типов, с помощью которой браузеры и приложения могут определить характеристики объектов. Прежде чем использовать объекты автоматизации, следует создать ссылку на библиотеку типов. Это нужно для того, чтобы глобальные функции были доступны непосредственно без подготовки. Вызовы функций при этом могут контролироваться компилятором на корректность. Увеличивается надежность и читабельность программы.
Получение первого примитива из базы данных рисунка
Применение variant в методах и свойствах
Интерпретация variant-массивов
Использование других языков программирования
Следующий пример демонстрирует создание линии в VB и VBA
Управление окружением AutoCAD
Открытие, сохранение и закрытие чертежа
Приложение AutoCAD VBA и особенности работы с ним
При разработке языка VBA его авторы ориентировались на обычных пользователей, а не на профессиональных программистов, поэтому создавать программы на VBA достаточно просто и быстро.
Из преимуществ языка VBA можно отметить легкость его освоения и простоту использования, универсальность (изучив VBA для AutoCAD пользователь без труда изучит, например, VBA для Microsoft Word или Excel). Главный недостаток языка VBA – проблемы с обратной совместимостью разных версий.
В AutoCAD также есть встроенная поддержка языка VBA, для этого служит отдельный модуль AutoCAD VBA Enabler. С помощью программ на VBA можно обращаться ко всем объектам AutoCAD, примитивам чертежа, общаться между AutoCAD и сторонними приложениями и многое другое. Другими словами, с помощью языка VBA можно создавать программы любой сложности, которые позволят расширить функциональность системы, автоматизировать рутинные операции и многое другое.
Важным отличием VBA для AutoCAD от VBA для других программ является то, что в нем программы хранятся не внутри файлов, а во внешних файлах с расширением DVB.
В последних версиях AutoCAD модуль VBA Enabler не входит в дистрибутив и не устанавливается вместе с самим AutoCAD. Чтобы получить возможность работать с VBA в AutoCAD, вам необходимо скачать и установить AutoCAD VBA Enabler со специальной страницы в интернете
Важно то, что при выборе модуля VBA Enabler нужно обратить внимание на версию AutoCAD и его разрядность. Например, модуль VBA для AutoCAD 2018 32-x не будет работать в среде AutoCAD 2018 64-x.
После скачивания, распаковки и установки модуля AutoCAD VBA Enabler в программе AutoCAD появится возможность работать с приложениями на языке VBA.
Окно редактора VBA (VBA IDE) запускается командой VBAIDE.
Оно стандартное для языка VBA и ничем не отличается от VBA в других программах.
Обратите внимание, что двоичный формат файлов проектов VBA в AutoCAD не совместим с форматом проектов Visual Basic. Однако, в VBA для AutoCAD можно импортировать формы, модули и классы, хранящиеся в файлах форматов FRM, BAS и CLS соответственно.
Список команд, предназначенных для работы с программами VBA:
Адаптация AutoCAD при помощи VBA
VBA может служить средством интеграции различных приложений, в которые встроена поддержка VBA. Таким образом, AutoCAD может управлять другими приложениями, например Microsoft Word или Excel, используя их библиотеки объектов.
Чтобы дополнить AutoCAD VBA такими компонентами, как модуль работы с внешними базами данных или средство подготовки отчетов, можно отдельно приобрести пакет Visual Basic 6, являющийся самостоятельным продуктом.
Разработка при помощи AutoCAD VBA
VBA отправляет сообщения через интерфейс AutoCAD ActiveX Automation. С помощью макроса AutoCAD VBA среда Visual Basic может работать одновременно с AutoCAD и осуществлять программный контроль AutoCAD через интерфейс ActiveX Automation. Связка AutoCAD, ActiveX Automation и VBA является очень мощным средством программирования. Она позволяет не только управлять объектами AutoCAD, но и обмениваться данными с другими приложениями.
Результатом интеграции VBA в AutoCAD является визуальный инструмент для адаптации AutoCAD. С его помощью можно, например, разработать приложение, которое автоматически извлекает значения атрибутов, вставляет результаты в книгу Excel и выполняет другие требуемые манипуляции с данными.
Принципы программирования на VBA для AutoCAD основываются на трех базовых составляющих. Первой составляющей является сама программа AutoCAD, которая обладает большим набором объектов, различных данных и команд. Возможность программирования в AutoCAD крайне желательна. Однако следует отметить, что положенный в основу VBA объектно-ориентированный подход к программированию существенно отличается от используемого в AutoLISP.
Второй составляющей является интерфейс ActiveX Automation, который определяет порядок передачи сообщений (взаимодействия) с объектами AutoCAD. Программирование на VBA требует понимания принципов организации интерфейса ActiveX Automation.
Третьей составляющей является, собственно, сама среда VBA. VBA имеет свой собственный набор объектов, ключевых слов, констант, которые используются при написании, отладке и выполнении программ. В комплект поставки AutoCAD входит обширная справочная система по VBA от Microsoft.
Интерфейс ActiveX/VBA программы AutoCAD обладает рядом преимуществ по сравнению с другими интерфейсами API AutoCAD.
Использование приложений VBA
Загрузка проекта VBA осуществляется командой VBALOAD. После загрузки модули и макросы проекта становятся доступными в диалоговом окне «Макросы».
Загрузка проекта VBA осуществляется командой VBALOAD. После загрузки модули и макросы проекта становятся доступными в диалоговом окне «Макросы». Для выполнения модуля VBA служит команда VBARUN. Если не загружено ни одного проекта VBA, данные параметры недоступны. При выводе процедур в списке с именами макросов используется следующий синтаксис:
В диалоговом окне «Макросы» перечнем отображаемых в списке модулей можно управлять с помощью списка «Макросы из».
Запуск макрокоманды VBA из командной строки
Автоматическая загрузка и выполнение проектов VBA
Можно автоматически загружать ранее созданные проекты VBA при каждом запуске AutoCAD. При этом содержащиеся в таких проектах макросы стразу же становятся доступными. Кроме того, для автоматической загрузки нужных приложений может использоваться команда ЗАГПРИЛ.
acvba.arx — Автоматическая загрузка VBA
Загрузка VBA возможна только после выполнения любой из команд AutoCAD VBA. Для того чтобы arx-модуль VBA автоматически загружался при запуске AutoCAD, следующую строку нужно добавить в файл acad. rx:
Для автоматического выполнения макроса его следует добавить в файл acad. dvb и назвать AcadStartup. Макрос с именем AcadStartup из файла acad. dvb выполняется автоматически при загрузке модуля VBA.
acad.dvb — Автоматическая загрузка проекта VBA
Файл acad. dvb удобно использовать для загрузки отдельных объектов VBA при каждом запуске AutoCAD. При каждом запуске нового сеанса AutoCAD производится поиск и загрузка файла acad. dvb.
Если какой-либо макрос файла acad. dvb должен выполняться при создании нового или открытии имеющегося чертежа, в файл acaddoc.lsp следует добавить приведенный ниже код:


