Разработка приложений с помощью VBA
Программа Microsoft ® Visual Basic ® for Applications (VBA) предоставляет интеграции различных приложений, в которые встроена поддержка VBA.
Программные продукты на основе AutoCAD могут использоваться как контроллеры автоматизации для управления другими приложениями, например Microsoft Word или Excel.
Прим.: VBA больше не устанавливается по умолчанию. Дополнительные сведения см. на веб-странице https://www.autodesk.com/vba-download-rus.
VBA отправляет сообщения через интерфейс AutoCAD ActiveX Automation. С помощью макроса AutoCAD VBA среда Visual Basic может работать одновременно с AutoCAD и осуществлять программный контроль AutoCAD через интерфейс ActiveX Automation. Связка AutoCAD, ActiveX Automation и VBA является очень мощным средством программирования. Она позволяет не только управлять объектами AutoCAD, но и обмениваться данными с другими приложениями.
Прежде чем можно будет редактировать или запустить макрокоманду из проекта VBA, она должна быть загружена в AutoCAD. Проекты VBA сохраняются в отдельном файле с расширением DVB и состоят из кода, модулей классов и форм. Благодаря тому что проекты VBA хранятся в отдельных файлах, в одном сеансе AutoCAD приложения VBA могут открывать и закрывать различные чертежи, что невозможно выполнить в AutoLISP.
Прим.: Проекты VBA не являются двоично совместимыми с файлами проектов Visual Basic (VBPROJ), созданными в Visual Studio.
Основные элементы VBA для AutoCAD
Принципы программирования на VBA для AutoCAD основываются на трех базовых составляющих.
- AutoCAD — обладает большим набором различных объектов AutoCAD, данных и команд. Возможность программирования в AutoCAD крайне желательна. Однако следует отметить, что положенный в основу VBA объектно-ориентированный подход к программированию существенно отличается от используемого в AutoLISP.
- Интерфейс ActiveX Automation — определяет порядок передачи сообщений (взаимодействия) с объектами AutoCAD. Программирование на VBA требует понимания принципов организации интерфейса ActiveX Automation.
- VBA — имеет свой собственный набор объектов, ключевых слов, констант, которые используются при написании, отладке и выполнении программ. В комплект поставки AutoCAD входит обширная справочная система по VBA от Microsoft.
Преимущества использования VBA
Интерфейс ActiveX/VBA программы AutoCAD обладает рядом преимуществ по сравнению с другими интерфейсами API AutoCAD.
- Скорость. Использование элементов ActiveX, вызываемых из VBA, обеспечивает более высокую производительность, чем использование приложений AutoLISP.
- Простота в использовании. Это простой в использовании язык и среда разработки, которая уже интегрирована в AutoCAD сразу после установки программы.
- Взаимодействие с приложениями Windows. ActiveX и VBA разработаны для использования в приложениях Windows и предоставляют прекрасные возможности для организации взаимодействия и обмена данными между различными приложениями.
- Быстрота разработки. Благодаря быстроте проектирования интерфейса приложений с помощью VBA данная среда может служить прекрасным средством для создания приложений-прототипов, даже если окончательная реализация планируется на другом языке программирования.
- Распространенность. Как правило, программисты знают Visual Basic .Net (VB.Net). VBA похож на VB.NET, и позволяет программистам, а также тем, кто хочет научиться программировать на языке отличном от AutoLISP, выполнять адаптацию AutoCAD и разрабатывать на нем приложения.
Vba макросы автокад что это
Интерфейс AutoCAD ActiveX/VBA дает некотрые приимущества по сравнению с другими AutoCAD API. Это 1. Скорость — т.к. в отличие от AutoLISP приложений выполнение происходит внутри процесса; 2. Простота использования — простой язык программирования; 3. Межпрограмный обмен — т.к. VBA и ActiveX разрабатывались для взаимодействия с другими Windows-приложениями. 4. Огромное количество программистов пишущих на VBA
ПОНЯТИЕ ВНЕДРЕННЫХ И ГЛОБАЛЬНЫХ ПРОЕКТОВ VBA
Приложение Autocad VBA представляет собой набор программных модулей, модулей классов и форм. Пороект может быть сохранен как в рисунке (внедренный) так и во внешнем файле. Внедренный проект автоматически загружается при открытии рисунка. Ограничение внедренных проектов в том, например, что они не могут закрыть рисунок внутри которого находятся. Глобальные проекты в этом плане более гибки, при этом однако пользователь должен знать где расположен файл в котором хранятся макросы. Глобальный проект проще передавать другим пользователям и в нем удобно хранить общие макросы. В любой момент могут быть использованы оба типа проектов. На уровне двоичного кода проект Autocad VBA не совместим с проектом Visual Basic, однако обмен формами, модулями и классами можно произвоидить через экспорт- импорт. (Команды IMPORT и EXPORT VBA)
ЗАГРУЗКА СУЩЕСТВУЮЩЕГО ПРОЕКТА
При загрузке проекта все глобальные процедуры, называемые так же макросами становятся доступными для использования. Загрузить проект можно через VBA-менеджер или с командной строки VBALOAD . Кроме того автокад грузит автоматически проект с именем acad.dvb, который может найти в путях файлов поддержки. При загрузке проекта может появиться предупреждение что он содержит макросы и значит может содержать и вирусы. Выгрузка проека командной VBAUNLOAD приводит к высвобождению памяти ранее занятой проектом. Внедрить проект в рисунок можно с помощью VBA-менеджера, он же позволяет извлечь проект из рисунка, при этом предлагая сохранить его в отдельном файле. Чтобы среда разработки VBA автоматически грузилась с автокадом, в файл acad.rx нужно внести строку acadvba.arx
ОПРЕДЕЛЕНИЕ КОМПОНЕНТОВ ПРОЕКТА
- Объекты
- Формы
- Стандартные модули
- Модули класса
- Ссылки
ОБЗОР КОМАНД VBA AUTOCAD
- VBAIDE — открывает окно VBA IDE, позволяющее редактировать, запускать и отлаживать программы
- VBALOAD — загружает проект
- VBARUN — запускает макрос на выполнение
- VBAUNLOAD — выгружает проект, освобождая память
- VBAMAN — показывает окно менеджера VBA
- VBASTMT — позволяет выполнить команду VBA в командной строке Автокада
ПОНЯТИЕ ОБЪЕКТНОЙ МОДЕЛИ АВТОКАД
- 1.1 Preferences
- 1.2 Documents
- 1.3 MenuBar
- 1.4 MenuGroups
- 1.1.1 PreferencesDisplay
- 1.1.2 PreferencesDrafting
- 1.1.3 PreferencesFiles
- 1.1.4 PreferencesOpenSave
- 1.1.5 PreferencesOutput
- 1.1.6 PreferencesProfiles
- 1.1.7 PreferencesSelection
- 1.1.8 PreferencesSystem
- 1.1.9 PreferencesUser
- 1.2.1 Blocks (блоки)
- 1.2.2 Dictionaries (словари)
- 1.2.3 DimStyles (размерные стили)
- 1.2.4 Groups (группы)
- 1.2.5 Layers (слои)
- 1.2.6 Layouts ()
- 1.2.7 Linetypes (типы линий)
- 1.2.8 PlotConfigurations (настройки плоттеров)
- 1.2.9 RegisteredApplications (зарегистрированные приложения)
- 1.2.10 SelectionSets (наборы)
- 1.2.11 TextStyles (стили текста)
- 1.2.12 UserCoordinateSystems (системы координат определенные пользователем)
- 1.2.13 Views (виды)
- 1.2.14 Viewports (видовые экраны)
- 1.2.15 DatabasePreferences ()
- 1.2.16 Plot (печать)
- 1.2.17 Utility (служебные программы)
- 1.2.18 ModelSpace (пространство модели)
- 1.2.19 PaperSpace (пространство листа)
- 3DFace
- 3DPoly
- 3DSolid
- Arc
- Attribute
- AttributeReference
- BlockReference
- Circle
- Dim3PointAngular
- DimAligned
- DimAngular
- DimDiametric
- DimOrdinate
- DimRadial
- DimRotated
- Ellipse
- ExternalReference
- Hatch
- Leader
- LWPolyline
- Line
- MInsertBlock
- MLine
- MText
- Point
- PolyfaceMesh
- Polyline
- PolygonMesh
- RasterImage
- Ray
- Region
- Shape
- Solid
- Spline
- Text
- Tolerance
- Trace
- Xline
Vba макросы автокад что это
Загрузка VBA-проекта осуществляется командой VBALOAD. После загрузки модули и макросы проекта становятся доступными в диалоговом окне «Макросы».
В отличие от приложений Microsoft, которые используют для хранения проектов, макросов и программ VBA непосредственно документы, AutoCAD для этих целей использует специальные файлы с расширением .dvb. Это обеспечивает возможность взаимодействия интерфейсов VBA с AutoCAD аналогично тому, как это делается в AutoLISP и ObjectARX. Благодаря тому, что проекты VBA хранятся в отдельных файлах, в одном сеансе AutoCAD приложения VBA могут открывать и закрывать различные чертежи.
Примечание Двоичный формат файлов проектов VBA в AutoCAD не совместим с форматом проектов Visual Basic 6 (файлами VBP). Однако из интегрированной среды разработки IDE (integrated development environment) VBA можно экспортировать и импортировать формы, модули и классы, используя для этого команды ИМПОРТ и ЭКСПОРТ.
Загрузка VBA-проекта осуществляется командой VBALOAD. После загрузки модули и макросы проекта становятся доступными в диалоговом окне «Макросы». Для выполнения модуля VBA служит команда VBARUN. Если не загружено ни одного проекта VBA, данные опции недоступны. При выводе процедур в списке с именами макросов используется следующий синтаксис:
В диалоговом окне «Макросы» перечнем отображаемых в списке модулей можно управлять с помощью списка «Макросы из».
Запуск макрокоманды VBA из командной строки
С помощью команды -VBARUN можно запустить макрокоманду из командной строки. Это позволяет запускать макрокоманды VBA из командной строки, сценариев и других сред программирования AutoCAD. Единственным аргументом команды должно быть имя модуля и макроса VBA, отделенные точкой ( модуль . макрос ). Образец вызова выглядит следующим образом:
-vbarun модуль. макрос>
Необходимость использования синтаксиса вида модуль . макрос обусловлена тем, что различные модули могут содержать макросы с одинаковыми именами.
AutoCAD. Макросы команд. Часть 1: Создаем свою кнопку
Когда об AutoCAD говорят как о «САПР», мне всегда хочется внести уточнение: «голый» AutoCAD это еще не САПР (система автоматизированного проектирования), а универсальная платформа (можно даже сказать «заготовка») для создания САПР под свои нужды. Ведь именно автоматизации в свежеустановленной программе как раз и нет, но зато есть колоссальные возможности по ее внедрению!
И большинство пользователей рано или поздно начинают потихоньку упрощать себе жизнь: создают свои шаблоны, осваивают поля, динамические блоки, наполняют ими палитры, запоминают псевдонимы команд и т.д. Это, можно сказать, «начальный уровень» автоматизации. По другую сторону лежит программирование в чистом виде: код в AutoCAD можно писать на встроенном LISP или VBA, или же вообще создавать внешние плагины и расширения (add-ons) под свои узкоспециализированные нужды. Возможности тут открываются поистине фантастические, но разобраться в этом уже сложнее, все-таки, программирование — это отдельная профессия. И туда мы (пока что) не полезем.
Кстати, стоит отметить, что писать код с нуля нужно далеко не всегда — в сети есть огромное количество различных LISP-ов и аддонов (как платных, так и бесплатных) для решения практически любых задач, главное, хорошо поискать.
[Собственно, о макросах]
Но если до программирования вы пока не доросли, а автоматизировать свою рутину ну очень хочется, советую обратить внимание на макросы. Чтобы не было путаницы, уточним, речь в статье пойдет о макросах (макрокомандах), набранных пользователем в текстовом виде.
Просто еще в программе есть возможность записывать действия пользователя через рекордер операций, и это тоже будет называться «макросом». Но о рекордере операций мы (может быть) напишем отдельную статью, а еще есть «сценарии» и это отдельная тема. В общем, писать и писать мне. =)
Под макросом мы будем понимать последовательность действий с использованием стандартных команд AutoCAD, которую программа будет выполнять по нажатию всего одной кнопки. Например, создание в документе нового слоя с конкретными параметрами или построение прямоугольника с заданными размерами. Эти примеры довольно простые, но зато понятные каждому. В целом же, возможности макросов довольно велики, но мы будем двигаться постепенно.
Перед тем как записать макрос, нужно понять где же мы его разместим? — Речь о той самой кнопке, по нажатию на которую и будет происходить вся магия. Вариантов тут несколько. Я предлагаю рассмотреть два самых популярных — кнопка на панели быстрого доступа и кнопка на палитре. В общем-то именно созданию кнопок и посвящен данный материал. Это вводная статья небольшого цикла о макросах. А учиться писать сами макросы мы будем уже во второй части.
[Создаем кнопку. Способ первый: кнопка на панели быстрого доступа]
Справа на панели быстрого доступа есть маленькая стрелка, нажмем на нее и выберем в выпадающем списке пункт Другие команды:
Другой способ сделать тоже самое, это перейти в ленте на вкладку Управление и нажать на кнопку Пользовательский интерфейс:
В любом случае откроется подобное окно:
Не забудьте нажать на стрелку внизу справа, чтобы оно приобрело более полный вид. Слева мы видим список всех команд. Когда видишь его в первый раз, приходит осознание, что команд в программе намного больше, чем выведено кнопок на панелях. Над списком расположена строка поиска, которая помогает не потеряться. Если поставить курсор на конкретную команду, мы увидим более подробную информацию о ней:
Если внимательно все рассмотреть, становиться понятно, что любая кнопка в ленте это просто ярлычок для соответствующего макроса. Теоретически, можно даже переопределить работу штатных кнопок. Но мы этого делать не будем. А создадим свою команду.
Для этого, нажмем на «звезду с солнышком», заполним поле имя команды и поле макроса. В качестве «теста», сделаем макрос, который запускает команду _audit (ПРОВЕРИТЬ) и сразу исправляет системные ошибки в документе. Название команде можете дать любое, а код макроса будет следующий:
^C^C_audit;_y;
Лучше скопировать его прямо отсюда. Во второй части мы подробно разберем данную строку и вам станет понятно, что именно там записано.
Также, можно сделать какую-то красивую (или не очень) иконку для нашей команды. За основу возьмите любую существующую иконку, затем нажмите Изменить. Откроется довольно примитивный редактор, в котором можно дорисовать что-то к выбранному изображению, или же очистить все и создать свой шедевр с нуля. Не забудьте его сохранить (вас спросят про имя файла, задайте любое). А затем закройте редактор. Картинка в помощь:
Наша команда готова, теперь находим ее в левой части окна адаптации и с зажатой левой клавишей мыши тащим ее на панель быстрого доступа:
Будьте внимательны, после этого в окне адаптации обязательно нужно нажать Ок или Применить. Если просто закрыть окно, изменения не сохранятся!
Кстати, так можно вытащить на панель абсолютно любую команду, которая изначально отсутствует на ленте. Например, здесь мы вытаскивали кнопку регенерации. В ролике по ссылке можно увидеть весь процесс вытаскивания кнопки (начиная с 1:42 по таймкоду). Посмотрите его, если данная статья вызывает затруднения.
Все, кнопка готова, можно пользоваться.
Для пробы откройте какой-нибудь старый (а лучше очень старый) dwg файл и проверьте его на ошибки. Их может 0, а может быть очень много — отчет будет выведен в командной строке.
От штатной команды наш макрос отличается тем, что сразу исправляет ошибки, без дополнительных запросов и действий со стороны пользователя. Советую регулярно выполнять данную команду — она поддерживает «здоровье» вашего файла и по моим наблюдениям снижает количество «глюков», «вылетов» и зависаний программы. Ошибки в процессе работы появляются сами по себе, обычно в процессе копирования больших объемов данных через буфер обмена. Отмечу, что речь идет именно о внутренних системных ошибках файла, а не об ошибках в том, что вы нарисовали =)
[Создаем кнопку. Способ второй: кнопка на палитре]
Инструментальные палитры используются для организации пользовательских панелей инструментов: на них можно размещать блоки, таблицы, выносить стандартные инструменты с дополнительными свойствами, создавать кнопки для вызова LISP приложений и макросов (это-то нам и нужно) и т.д. Вообще, палитры — очень обширная тема, заслуживающая отдельной статьи. Здесь же мы пройдемся по самым «верхам». Итак, открываются палитры сочетанием клавиш CTRL+3
Стандартные палитры нам не особо интересны, поэтому сразу создадим свою. Для этого щелкнем правой кнопкой мыши на левом «корешке» палитры и выберем пункт Создать палитру
Сразу зададим ей имя (например, «Моя первая палитра»).
По-хорошему, надо бы создать для нашей палитры свою группу и поместить ее туда, чтобы можно было скрыть остальные (стандартные) палитры, но в данном случае это необязательно. Если у меня дойдут руки до написания отельной статьи про палитры, там я расскажу об этом.
Теперь нужно добавить на палитру красок, т.е кнопок, на которых мы сможем размещать наши макросы. Для этого снова зайдем в адаптацию команд (как мы делали в начале статьи), но для разнообразия сделаем это другим (уже третьим по счету) способом. Нажмем правой кнопкой мыши в пустом месте нашей палитры, и выберем пункт Адаптация команд:
Откроется уже знакомое нам окно. В нем берем абсолютно любую команду, и удерживая левую кнопку мыши перетаскиваем ее на палитру, после чего отпускам кнопку, закрываем окно адаптации.
На палитру можно поместить любую команду, а потом «переделать» ее до неузнаваемости под собственные нужды. Нам просто была нужна донорская кнопка. Нажмем на ней правой кнопкой мыши и выберем пункт Свойства объекта:
В открывшемся окне изменим название команды, описание (это по желанию) и главное, вставим наш макрос ^C^C_audit;_y; в поле Командная строка:
Нажимаем Ок, и макросом можно пользоваться! Для удобства можно нажать правой кнопкой на картинку инструмента и выбрать другое изображение. Я заранее нарисовал в графическом редакторе .png картинку размером 64×64 пикселя с крестиком. Но можно поставить туда все что угодно, хоть свое фото.
Самое классное в способе с палитрами, это возможность копировать/вставлять инструменты через контекстное меню. Останется лишь изменить название инструмента, текст макроса и изображение
Это способ позволяет очень быстро создавать свои кнопки, формируя из них целые панели со своими инструментами. Например так выглядит одна из моих палитр с LISP приложениями (название инструментов можно скрывать, оставляя только картинки):
[Чему мы научились]
Мы познакомились с понятием макрокоманды, рассмотрели два способа создания пользовательских кнопок, и теперь полностью готовы к написанию своих макросов. О том, как это делается, читайте в следующей статье. В ней мы разбираем синтаксис макросов и рассматриваем несколько конкретных примеров. Главное, что теперь мы знаем куда помещать эти макросы.