Установить vba для autocad 2014
COM-автоматизация – технология, с помощью которой приложения, написанные на различных языках программирования, могут получать функциональность программных систем (AutoCAD, Word, Excel и др.). Объектная модель приложения определяет иерархию объектов. Доступ к какому-либо свойству (или методу) конкретного объекта осуществляется через указание всех объектов в иерархической последовательности от корневого объекта (Application) и ниже.
Например, возможность обращения к командной строке из программы, написанной на языке VB, реализуется через метод SendCommand объекта ActiveDocument:
Ниже рассматривается простейший пример программы с загрузкой системы AutoCAD и управление через свойства и методы объекта Circle непосредственно из VB приложения.
В Visual Studio создайте VB проект c прототипом Windows Forms Application. На форме разместите 4 командных кнопки. При запуске VB приложения загружается диалоговое окно и запускается AutoCAD. При выборе кнопок в последовательности сверху вниз соответственно выполняются действия:
Постановка задачи. Разработать программный продукт, обеспечивающий создание в системе AutoCAD комплексного чертежа из 3-х проекций и аксонометрии.
Для решения задачи создается VB проект, который обеспечивает запуск AutoCAD, загрузку и запуск 2-х VLisp приложений.
В файле mod3d.lsp описывается создание 3D модели объекта, файле pro3.lsp – создание комплексного чертежа из 3-х проекций и аксонометрии объекта.
Структура приложения позволяет разрабатывать комплексный чертеж для любого пространственного объекта. При этом модифицируется только лишь файл mod3d.lsp.
Задание: Модифицируйте файл mod3d.lsp, обеспечив создание в AutoCAD модели в соответствии с вариантом задания.
Ниже описывается программа, обеспечивающая моделирование процесса нарезания резьбы с использованием методов и свойств объектов AutoCAD.
Откройте в AutoCAD чертеж Винт.dwg.
Создайте VB проект с формой, на которой размещены две командные кнопки. Одна из кнопок запускает процесс нарезания резьбы, вторая выгружает AutoCAD и закрывает форму. Подключите к проекту библиотеку AutoCAD. Для этого выберите кнопки меню Project>References и отметьте флажок AutoCAD 20… Type Library.
Скопируйте листинг программы (см. ниже) в окно кода. Ознакомьтесь с описанием программы, модифицируйте ее, если необходимо. Протестируйте программу.
Запустите AutoCAD и откройте чертеж-прототип Винт.dwg. При запуске программы (загрузке формы) и нажатии кнопки cmdStart устанавливается связь с этим чертежом-прототипом.
Язык программирования VisualBasic for Applications (VBA) является такой же встроенной в AutoCAD средой, как и VisualLISP среда. VBA обеспечивает более удобную среду для создания диалоговых окон по сравнению с совместным использованием для этой цели языков VLISP и DCL. Однако, VLISP более прост для программирования графических операций. К тому же графические действия выполняются на VBA медленнее, поскольку они осуществляются опосредовано через интерфейс COM-автоматизации.
Различия между VBA и VB:
- VBA запускается в том же самом рабочем пространстве, как и AutoCAD, обеспечивая очень быструю среду программирования.
- VBA имеет собственный набор объектов, ключевых слов, констант, и т. д., который обеспечивает управление, отладку и выполнение программы.
- VBA не поддерживает создание выполнимых (executables) программ.
- VBA обеспечивает связь с активным рисунком в текущем AutoCAD сеансе через объект ThisDrawing. Используя ThisDrawing Вы получаете непосредственный доступ к текущему объекту Document, всем методам, свойствам, и другим объектам в иерархии.
Если VBA не поддерживает создание выполнимых (executables) программ. Тогда возникает вопрос, каким образом запускается VBA приложение? Прежде всего, введем новый термин Макрокоманда (Macros) – это VBA подпрограмма, записанная в модуле ThisDrawing или Module. Каждая подпрограмма, записанная в этих модулях, может запускать VBA приложение. Для запуска приложения необходимо выделить имя макроса в диалоговом окне Macros (вызывается из среды AutoCAD кнопками меню Tools>Macro>Macros) и щелкнуть на кнопке Run.
Макросы можно запустить не только из диалогового окна, но и с командной строки, например:
Предварительно командой VBALOAD должен быть загружен проект, запускаемый макросом.
VLISP также позволяет запустить VBA (функция vl-vbarun), однако данные одной среды (переменные и константы) не могут быть видимы из другой среды. В этом случае существует единственная возможность обмена информацией – запись данных в файл одной программой и считывание данных из другой программы.
Нередко возникают вопросы, связанные с переходом на AutoCAD 2014 x64 с более ранних версий (или с 32-разрядной версии AutoCAD 2014). Звучит это примерно так:
"Мой макрос VBA использует несколько дополнительных контролов (далее OCX) или библиотек типов (TypeLibrary). Макрос прекрасно работал в AutoCAD вплоть до версии 2014. Сейчас макрос выдает ошибку, связанную именно с этими OCX/TypeLibrary"
Объяснение кроется в том, что AutoCAD 2014 - первая версия AutoCAD, используюшая новейшую версию Microsoft VBA: 7.1, в то время как предыдущие выпуски AutoCAD использовали VBA версии не выше 6.3. VBA вплоть до 6.3 существует только 32-разрядным, а VBA 7.1 может быть и 32-, и 64-разрядным. Очевидно, что AutoCAD 2014 x64 использует именно VBA 7.1 x64. Скорее всего, Ваши дополнительные OCX или TypeLibrary являются 32-разрядными и именно по этой причине не могут быть ни загружены, ни (тем более) использованы. Невозможно загрузить 32-разрядный компонент в адресное пространство 64-битного процесса. Это и есть первая и единственная причина получения ошибки при попытке запуска макроса.
Чтобы добиться работоспособности макроса, Вам придется заменить 32-разрядные версии своих компонентов их 64-битными аналогами. Или, если таковых не существует, переделать свой проект - либо найдя обходные пути, либо использовать OCX / TypeLibrary от другого поставщика.
Причина, по которой тот же самый макрос VBA корректно работал в предыдущих версиях, проста: AutoCAD использовал VBA 6.3 как сторонний 32-разрядный процесс, общавшийся с AutoCAD посредством маршалинга (раньше подобный механизм назывался СОМ-взаимодействием). Т.е., даже несмотря на то, что AutoCAD работал как 64-битное приложение, VBA продолжал существовать как 32-битный процесс и поэтому мог использовать 32-разрядные версии дополнительных компонентов OCX / TypeLibrary.
Тот факт, что VBA запускался как сторонний процесс, был одной из причин весьма низкого быстродействия макросов в 64-разрядных AutoCAD даже по сравнению с 32-разрядными версиями (также см.статью AutoCAD, VBA и производительность). Новая версия VBA 7.1 решает проблему быстродействия, но в некоторых случаях может сослужить не самую лучшую службу.
Вы слышали что AutoCAD R14 и 2000 содержат новый опциональный язык программирования — VBA (Visual BASIC for Applications). Но как только Вы загружаете его, Вы поражаетесь огромному количеству окон и опций меню, не совсем соответсвующим вашим представлениям о новом языке программирования. Некоторые специалисты в AutoLISP или других языках программирования. Однако я ручаюсь, что VBA не настолько сложен, как кажется. Когда вы закончите читать это руководство, Вы будете знакомы с VBA и его средой разработки. Вы также создадите простое VBA-приложение. Ну что, готовы? Давайте начинать.
Откройте VBA IDE (Integrated Development Environment). Из меню AutoCAD Tools, выберите Macros|Visual Basic Editor.
Изучение интерфейса VBA
Прграммирование на VBA очень отличается от программировнаия на AutoLISP, и одним из самых больших отличий является среда программирования. AutoLISP не имеет встроенной среды программирования - вы должны использовать текстовый редактор, что бы создавать и редактировать код. Когда приходит время отладки, вы ограничены установкой команды печати в вашем коде для отображения текущего состояния программы и переменных. Существуют программы, которые позволяют сделать этот процесс более легким, но их нужно приобретать отдельно.
VBA, с другой стороны, идет с всеми этими функциями, которые являются встроенные. VBA IDE включает редактор кода, конструктор форм, и отладчик в одном пакете. Из меню AutoCAD Tools, выберите Macros|Visual Basic Editor. Когда отобразиться VBA IDE, Вы увидите массив меню, кнопок и окон.
Сначала найдите окно с названием. Это Обозреватель проектов Project Explorer (справа). Подобно как Windows Explorer отображает все файлы и каталоги на вашем жестком диске и помогает вам находить и работать со специфическими файлами, Project Explorer отображает все формы и модули с кодом в вашем проекте и помогает вам находить и работать со специфическими формами или модулями.
Вы увидете три папки: AutoCAD Objects, Forms, и Modules. Когда вы добавляете форму или модуль к вашему проекту, VBA добавляет их к соответствующей папке.
В AutoCAD 2000, папка AutoCAD objects содержит объект ThisDrawing, который автоматически присоединяется к AutoCAD.
Все перечисленные окна помогают вам работать с формами. Формы - ваш основной интерфейс с пользователем. Там, где вы использовали диалоговые окна в программе на AutoLISP, вы используете формы в VBA.
Оформление внешнего вида программы на VBA
Откройте меню Insert menu и выберите UserForm. Появяться два новых окна. Первое, называемое Project-UserForm1 (UserForm), это конструктор форм. Вы должны использовать его для графического конструирования форм. Второе окно, называемое Toolbox, содержит различные объекты, которые вы можете добавить к форме.
Прежде всего, посмотрите на новое имя формы: UserForm1. Каждый VBA-проект, каждая форма и модуль внутри проекта, и каждый объект и каждый объект в каждой форме имеет свое имя. Когда вы начинаете проект, добавляете новую форму к проекту, или добавляете новый объект к форме, VBA создает имя по умолчанию. Я думаю, что вы будите изменять эти имена на другие, что нибудь значащие для вас. Нажмите правой кнопкой мыши на Project в Project Explorer и выберите Project Properties из всплывающего меню. Измените имя проекта на VbaDemo и нажмите на OK.
Прежде всего, найдите окно с названием Properties (справа). Я хочу Вам напомнить, большинство объектов имеют свойства, которые определяют внешний вид объекта. Окно window позволяет вам легко устанавливать эти свойства. Прямо сейчас, падающее меню вверху окна должно отображать UserForm1 UserForm. Падающее меню содержит каждый объект, который вы расположили на форме. Ниже падающего меню находится длинный список свойств формы: заголовок, высота, вершина и много других. Левая сторона перечисляет каждое свойство, а правая показывает значение каждого свойства. Найдите свойство Name и измините его на MainWin. Заметьте, что Project Explorer обновляет имя формы.
Теперь, найдите свойство Caption и установите его в VBA Demo. Посмотрите заголовок формы в конструкторе форм после того как вы изменили его - оно измениться автоматически. Если вы когда-либо разрабатывали диалоговые окна используя AutoCAD DCL, вы должны оценить, насколько просто создавать формы в VBA.
Теперь вы готовы углубиться в Toolbox (ниже слева) и спроектировать свою собственную форму. Чтобы добавить управление к вашей форме, кликните на иконке в панели инструментов Control, а затем кликните на форме. Если Вы не уверены, какой вид управления представляет определенная кнопка в пaнели инструментов Control, подведите курсор мыши на несколько секунд к иконке, и тогда отобразиться описание того, что собой представляет данная иконка. Верхняя левая точка иконки расположиться в той точке, на которую вы укажете в форме. Вы можете изменить размер иконки управления перемещая любой из его углов или граней, точно так же как Вы мог бы изменять размеры Проводника Windows.
Вы можете также установить его свойста Top, Left, Height, и Width в окне свойств (Properties). Дале добавте две командные кнопки к форме. Измените имя первой кнопки на SayHello и ее заголовок на Say Hello, а затем измените имя второй кнопки на AskQuestion и ее заголовок на Ask a Question. Ваша первая форма должна быть похожа на ту, которая показана на рисунке 5.
Работа с пользователем.
Теперь, когда интерфейс с пользователем завершен, вам нужно добавить немного кода за сценой. VBA в AutoCAD R14.01 и R2000 имеет встроенную связь с AutoCAD, в отличие от R14, где нужно вручную подключать VBA к AutoCAD.
Я знаю, это не имеет смысла В конце концов, вы всегда запускаете внутри AutoCAD и вы никогда не должны были это делать с AutoLISP! Но VBA не специфическая для AutoCAD среда. Одно VBA-приложение может управлять любым количеством поддерживающих VBA приложений.
К примеру, вы можете использовать VBA для того, что бы сформировать перечень материалов, извлекая атрибуты из вашего чертежа, и соформировать затем таблицу в Excel. Вы так же можете использовать AutoCAD VBA среду что бы создавать приложения, которые не связаны с AutoCAD. Как всегда, добавление гибкости означает добавление работы, к счастью, эта работа не слишком напряжена.
Прежде всего, кликните правой кнопкой на форме и выберите View Code из всплывающего меню. Это откроет редактор кода. Хотя на первый взгляд редактор кода похож на обыкновенный текстовый редактор, на самом деле он - намного большее.
Посмотрите на два падающих меню в верхней части редактора. Падающее меню Objects слева - это перечень всех объектов, которые вы расположили в форме. Падающее меню Events справа - это перечень каждого события для вашего текущего объекта. Когда вы выбираете объект, редактор кода автоматически добавлет подпрограмму обработки событие по умолчанию для этого объекта. Когда вы выбираете событие, редактор автоматически добавляет подпрограммку поддержки этого события вместе с любыми требуемые аргументами.
По мере того как Вы набираете код, редактор делает много работы для Вас. Если Вы ссылаетесь на стандартную для VBA процедуру, редактор отображает подсказку которая перечисляет стандартный для данной процедуры синтаксис. По мере того как вы перемещаетесь со строки на строку, редактор подсвечивет определенным цветом ключевые слова, коментарии, и так же проверяет каждую строку на синтаксические ошибки. В дополнении, вы можете перемещаться к странице со справкой, просто переместив курсор к месту вызова метода и затем нажав F1 Хотя эта деятельность может казаться навязчивой сначала, вскоре Вы найдете это чрезвычайно полезным. Я настолько привык к этому, что, когда я изменяю старый AutoLISP-код, мне необходимо некоторое время, что бы привыкнуть что код не окрашивается и не проверяется тут же.
Я уверен что Вы стремитесь видеть все это в действии. Выберите General из падающего меню Objects и Declarations из падающего меню Events, и затем добавьте следующие переменные для образования связи:
Далее выберите объект UserForm и его событие Initialize. Событие - это специальный тип метода, который запускается когда что-нибудь случается в объекте. В этом случае, событие Initialize включает отображение формы. Добавьте следующий код:
Вызов GetObject осуществляет попытку соединиться с выполняемы сеансом AutoCAD. Если это невозможно , происходит ошибка. Таким образом, немедленно после попытки, ваше приложение должно проверить, было ли это успешно. Если нет, необходимо дать знать об этом пользователю, а затем выгрузить форму. Процесс выгрузки формы автоматически завершает приложение.
Также, как ваше приложение нуждается в помощи при соединении с AutoCAD, оно должно сообщить о том, когда оно разорвет связь с AutoCAD. Выберите событие Terminate в объекте UserForm и наберите:
Это освободит соединение.
Если вы используете AutoCAD 14.01 или 2000, вы можете удалять весь код что вы набрали. Как я упомянул, Вы имеете встроенный объект ThisDrawing который представляет текущий чертеж. Он имеет свойство Application которое вы можете использовать для вызова любых методов объекта Application.
Получение ответа
После того как вы подключились к AutoCAD, вам необходимо добавить немного кода к вашему приложению что бы оно занало, что делать, когда пользователь что-то делает. Сделайте двойной щелчек мыши на кнопке SayHello в вашей форме. Обратите внимание что ваш редактор кода перемещается к событию Click кнопки. Это событие по умолчанию для управления кнопкой. Если вы желаете немного другое событие, Вы можете просто выбрать его из правого падающего списка.
Когда вы укажите MsgBox отобразить кнопки Yes и No, вы можете проверить код возврата что бы определить, какую кнопку нажал пользователь. Если возвращаемое значение эквивалентно встроенной константе vbYes, пользователь нажал кнопку Yes. И как вы можете догадаться, нажатие кнопки No будет возвращать значение vbNo.
Готовы видеть результаты ваших усилий? Запустите программу на выполнение выбрав Run из меню Run. Ваша форма отобразиться в окне AutoCAD, и выступающие кнопки будут настаивать на ответе. Немного поотвечайте на вопросы, а затем возвращайтесь, когда вы утомитесь отвечать на вопросы.
Ваше приложение прочти закончено, но оно не содержит одной важной детали. Приложение запускается из среды разработки VBA, но как оно будет загружаться внутри AutoCAD? Никакие силы не заставят без этой детали запуститься приложению из командной строки AutoCAD. Что бы это сделать, вам необходим метод-помощник. Откройте в VBA меню Insert и выберите Module. Измените имя модуля на AppStuff, и введите следующий код в редакторе:
Я инженер-проектировщик ОВиК, не программист. И не хочу, да и некогда, вникать в серьезное программирование. Чаще всего появляется ситуация, что нужно как-то автоматизировать рутину здесь и сейчас. На помощь приходит простой язык 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-то основной инструмент у инженера.
Читайте также: