Vba enabler что это
Приложение 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:
Автоматизация рутинных операций между 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-то основной инструмент у инженера.
Мастерская СПДС
nano СПДС, СПДС GraphiCS для AutoCAD и не только.
четверг, 6 августа 2015 г.
Подключение VBA проекта в AutoCAD
У пользователей иногда возникают сложности с подключением VBA к AutoCAD, что бы сто раз не повторять.
Для того, что бы запустить макрос его надо загрузить в AutoCAD из меню:
Или командой VBAMAN.
В результате появится окно диспетчера VBA.
И подключаем необходимые библиотеки, нам нужна библиотека: «MechaniCS COM2 type library». Которую можно найти пролистав список ниже или нажав кнопку «Browse..» и явно указав расположение файла McCOM2.dll, который как правило располагается в «c:\Program Files\CSoft\СПДС GraphiCS 9\mg9x64\McCOM2.dll» или где-то рядом.
Там же в «Tools-> References» проверяем, что подключена необходимая версия библиотеки Autocad 20XX Type Library, перед названием библиотеки не должно быть слова Missing
В принципе все готово для работы скрипта.
Осталось сделать для него кнопку или пункт меню, но можно запустить и вот так:
Vba enabler что это
Вы слышали что 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, с другой стороны, идет с всеми этими функциями, которые являются встроенные. 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.
В дополнении, в любое время вы можете спросить у пользователя более чем две или три части информации, поскольку формы воспринимаются быстрее чем сообщения в командной строке. Мы используем формы, что бы позволить пользователю решить, какую информацию отображать.
Оформление внешнего вида программы на 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 обновляет имя формы.
Теперь вы готовы углубиться в 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. Как всегда, добавление гибкости означает добавление работы, к счастью, эта работа не слишком напряжена.
По мере того как Вы набираете код, редактор делает много работы для Вас. Если Вы ссылаетесь на стандартную для VBA процедуру, редактор отображает подсказку которая перечисляет стандартный для данной процедуры синтаксис. По мере того как вы перемещаетесь со строки на строку, редактор подсвечивет определенным цветом ключевые слова, коментарии, и так же проверяет каждую строку на синтаксические ошибки. В дополнении, вы можете перемещаться к странице со справкой, просто переместив курсор к месту вызова метода и затем нажав F1 Хотя эта деятельность может казаться навязчивой сначала, вскоре Вы найдете это чрезвычайно полезным. Я настолько привык к этому, что, когда я изменяю старый AutoLISP-код, мне необходимо некоторое время, что бы привыкнуть что код не окрашивается и не проверяется тут же.
Я уверен что Вы стремитесь видеть все это в действии. Выберите General из падающего меню Objects и Declarations из падающего меню Events, и затем добавьте следующие переменные для образования связи:
‘On Error Resume Next’ говорит VBA переместиться на следующую инструкцию всякий раз, когда произойдет ошибка. без этой строки приложение будет остановлено и отобразиться диалоговое окно с сообщением об ошибке.
Также, как ваше приложение нуждается в помощи при соединении с AutoCAD, оно должно сообщить о том, когда оно разорвет связь с AutoCAD. Выберите событие Terminate в объекте UserForm и наберите:
Это освободит соединение.
Если вы используете AutoCAD 14.01 или 2000, вы можете удалять весь код что вы набрали. Как я упомянул, Вы имеете встроенный объект ThisDrawing который представляет текущий чертеж. Он имеет свойство Application которое вы можете использовать для вызова любых методов объекта Application.
Получение ответа
После того как вы подключились к AutoCAD, вам необходимо добавить немного кода к вашему приложению что бы оно занало, что делать, когда пользователь что-то делает. Сделайте двойной щелчек мыши на кнопке SayHello в вашей форме. Обратите внимание что ваш редактор кода перемещается к событию Click кнопки. Это событие по умолчанию для управления кнопкой. Если вы желаете немного другое событие, Вы можете просто выбрать его из правого падающего списка.
Как минимум, вы дадите для MsgBox сообщение для отображения, но этот метод может больше, если ему дать больше информации. К примеру, он может задать вопрос пользователю и сообщить его вам. Выберите AskQuestion из меню Object в редакторе кода; редактор снова предположит что вам нужно событие Click. Добавьте следующий код:
Когда вы укажите MsgBox отобразить кнопки Yes и No, вы можете проверить код возврата что бы определить, какую кнопку нажал пользователь. Если возвращаемое значение эквивалентно встроенной константе vbYes, пользователь нажал кнопку Yes. И как вы можете догадаться, нажатие кнопки No будет возвращать значение vbNo.
Готовы видеть результаты ваших усилий? Запустите программу на выполнение выбрав Run из меню Run. Ваша форма отобразиться в окне AutoCAD, и выступающие кнопки будут настаивать на ответе. Немного поотвечайте на вопросы, а затем возвращайтесь, когда вы утомитесь отвечать на вопросы.
Ваше приложение прочти закончено, но оно не содержит одной важной детали. Приложение запускается из среды разработки VBA, но как оно будет загружаться внутри AutoCAD? Никакие силы не заставят без этой детали запуститься приложению из командной строки AutoCAD. Что бы это сделать, вам необходим метод-помощник. Откройте в VBA меню Insert и выберите Module. Измените имя модуля на AppStuff, и введите следующий код в редакторе:
Vba enabler что это
Cоздание утилиты для AutoCAD 2000 с помощью VBA
Автор: Mike Gunderloy
оригинал статьи находиться по здесь
Автор перевода: Виктор Ткаченко
http://www.cad.dp.ua/
С появлением AutoCAD 2000, VBA в AutoCAD достиг совершеннолетия. Новая версия избавилась от многих ограничений начальной реализации VBA в AutoCAD R14, и добавила реальные функциональные возможности непосредственно к AutoCAD.
Чтобы почуствовать, что Вы можете теперь делать с помощью VBA, эта статья, представляет простую утилиту MRU +. Эта утилита, показанная на рисунке 1, сохраняет список последних открытых чертежей, показывает Вам те, которые загружены в настоящее время, и позволяет Вам загружать и выгружать чертежы просто устанавливая галочку рядом с названием чертежа. Хотя это простая утилита, но MRU + демонстрирует многие из новых возможнстей VBA в AutoCAD, и должна помочь научить вас владеть средой VBA в AutoCAD.
Добро пожаловать в VBA AutoCAD.
Два типа проектов в VBA
Конечно, глобальный проект более предпочтителен для утилиты, разработанной, чтобы фиксировать информацию относительно множества чертежей. В случае MRU +, глобальный проект это фалй MRUPlus.dvb. Расширение «dvb» используется AutoCAD для глобальных проектов, сохраненных на диске.
Загрузка при запуске
AutoCAD 2000 автоматически не инициализирует VBA всякий раз, когда Вы его запускаете. Скорее, VBA загружается по требованию. Однако, имеются два способа когда Вы можете загружать и запускать код VBA при запуске. Во первых, Вы можете создавать глобальный проект VBA, с названием acad.dvb, и сохранять его в вашем каталоге AutoCAD. Любой проект с этим названием будет автоматически загружен при запуске AutoCAD. Далее, если это содержит макроc ( процедуру Sub ) с названием AcadStartup, эта макрокоманда будет автоматически выполняться, как только файл acad.dvb загружен.
Как вариант, Вы можете расположить команды AutoLisp в файле acad.lsp, который также должен быть в каталоге AutoCAD. Любая функция AutoLisp названая STARTUP в этом файле будет автоматически выполняться, когда файл загружен. Как вы будете видеть в этой статье, Autodesk сделала хорошую работу по созданию связи между старшим языком Lisp и более новым языком VBA, что бы стало возможно для кода Lisp, вызвать код VBA и наоборот.
Для приложения, хорошая мысль, модифицировать файл acad.lsp, чтобы загружать приложение при запуске. Большинство пользователей AutoCAD знакомы с изменением этого файла и с языком Autolisp, так что добавление строки кода, чтобы загрузить ваше приложение должно быть для них просто. Вы можете просто загружать приложение, или можете загружать приложение и запускать макрос из него в то же самое время.
Чтобы загрузить приложение, Вы можете использовать код Autolisp, чтобы вызвать команду AutoCAD vbaload:
Или, чтобы запустить процесс инициализации в приложении, Вы можете вызывать команду vbarun:
Аргумент команды vbarun может быть полностью квалифицирован в форме:
Если указанный файл не загружен, он будет сначала загружен, и затем будет выполнен макрос. По умолчанию, команды vbarun или vbaload загружают файлы только из главного каталога AutoCAD. Если ваша утилита сохранена в другом месте, вы будете должны указать полный путь и имя файла в аргументе. В этом случае, Вы нуждаетесь в «escape» из знаков наклонной черты влево, удваивая их. Например, это имело силу бы в файле acad.lsp:
Как часть своего загрузочного кода, MRU + добавляет себя к меню AutoCAD File, только выше встроенного списка последних использованных файлов. В предыдущих версиях AutoCAD, эта операция была полностью невозможна для кода VBA. Теперь новая ветвь объектной модели AutoCAD делает такие вещи тривиальными.
Рисунок 3 показывает новый объекты AutoCAD, доступные для манипулирования инструментальной панелью и меню. Объект MenuBar контролирует все меню, в настоящее время отображенные в главной строке меню AutoCAD. Вы можете вставилять и удалять меню, вызывая методы InsertInMenuBar и RemoveFromMenuBar объекта PopupMenu.
Объект PopupMenu представляет стандартное падающее меню, или меню вызываемое по правой кнопке мыши. Объект PopupMenuItem представляет единственный пункт меню.
Система MenuGroups содержит набор объектов MenuGroup. Каждый MenuGroup может содержать меню и панели инструментов. Вы можете загружать группы меню из файла на диске. После того, как вы загрузили группу меню, ее содержание станет доступным, чтобы загрузиться в MenuBar или сокращенные меню.
Система Toolbars содержит объекты Toolbar, каждый из которых представляет панель инструментов. Индивидуальные кнопки панели представлены объектами ToolbarItem.
Утилита MRU + делает самую простую возможную операцию с этими объектами: Она прибавляет пункт меню, который отображает интерфейс пользователя к файловому меню. Это делается одной строкой кода:
Хотя можно иметь несколько одновременно загруженных глобальных проектов VBA, они все используют единственный объект названный ThisDrawing. Этот объект представляет собой активный документ в интерфейсе пользователя AutoCAD, и имеет класс AcadDocument. (В отличие от многих других объектных моделей, в модели AutoCAD имена всех объектов начинаються с префикса «Acad», чтобы гарантировать однозначность в операциях). Если несколько проектов VBA включают обработчики для событий для объекта ThisDrawing, каждый из обработчиков событий вызывается по очереди.
Использование событий ThisDrawing просто. Каждый глобальный проект VBA, который Вы создаете автоматически, содержит пример объекта ThisDrawing который не может быть удален. В приложении MRU + событие ThisDrawing.BeginClose используется, чтобы сообщить главной форме, когда рисунок выгружается из пользовательского интерфейса. Это событие содержит минимум кода, чтобы вызвать метод public формы интерфейса пользователя, чтобы расположить соответствующий ListItem в ListView и не контролировать это.
Имя события | Новое | Исполняется когда: |
Activate | Да | Окно чертежа выбирается |
BeginClose | Да | Пользователь или программа пытается закрыть чертеж |
BeginCommand | Да | Запущена команда |
BeginDoubleClick | Да | Пользователь осуществляет двойной щелчек мышью на любом объекте чертежа |
BeginLisp | Нет | Lisp-выражение посылается на исполнение |
BeginPlot | Да | Начинается операция печати |
BeginRightClick | Да | Пользователей нажимает правую кнопку мыши на любом объекте в черетеже |
BeginSave | Да | Пользователь начинает сохранять чертеж |
BeginShortcutMenuCommand | Да | Пользователь выдает сокращенного меню коммандного режима |
BeginShortcutMenuDefault | Да | Пользователь выдает сокращенное меню по умолчанию |
BeginShortcutMenuEdit | Да | Пользователь выдает сокращенное меню EDIT |
BeginShortcutMenuGrip | Да | Пользователь выдает сокращенное меню GRIP |
BeginShortcutMenuOsnap | Да | Пользователь выдает сокращенное меню OSNAP |
Deactivate | Да | Окно чертежа становиться не активным |
EndCommand | Нет | Завершается выполнение команды |
EndLisp | Да | Завершается вычисление Lisp-выражения |
EndPlot | Да | Завершается операция печати |
EndSave | Да | Завершается операция записи |
EndShortcutMenu | Да | Любое сокращенное меню фактически появляется. |
LayoutSwitched | Да | Пользователь переключатеся на другой layout |
LispCancelled | Да | Выполнение lisp-выражения прервано |
ObjectAdded | Да | Любой объект добавлен к чертежу |
ObjectErased | Да | Любой объект удален из чертежа |
ObjectModified | Да | Любой объект модифицирован |
SelectionChanged | Да | Текущий набор выбора изменен |
WindowChanged | Да | Окно максимизируется или минимизируется |
WindowMovedOrResized | Да | Окно перемещается или изменяется его размер |
Зацепление объекта Application
Помимо наличия ThisDrawing, который представляет активный документ, утилита MRU + также должна контролировать события объекта AcadApplication (представляющего непосредственно AutoCAD) чтобы знать, когда новый рисунок был открыт. В отличие от объекта ThisDrawing, однако, глобальные VBA объекты не получают автоматически образец объекта AcadApplication. К счастью, Вы можете использовать в VBA ключевое слово WithEvents, чтобы создать ваш собственный. Последовательность событий, что использует MRU+, чтобы зацепить cобытие EndOpen объекта AcadApplication, который испольняется всякий раз, когда открывается новый рисунок, выделенный в следующих абзацах.
Файл acad.lsp, как Вы уже видели, содержит код вызова процедуры LoadMRUPlus в basMRUPlus. Наряду с другим загрузочным кодом, эта процедура устанавливает образец частного класса называемого CApp и устанавливает одно из его свойств:
События объекта AcadApplication полностью новые в AutoCAD 2000. В таблице ниже показан список новыех событий предмета AcadApplication.
Имя события | Когда исполняется |
AppActivate | AutoCAD получает фокус |
AppDeactivate | AutoCAD теряет фокус |
ARXLoaded | приложение ObjectARX загружается |
ARXUnloaded | приложение ObjectARX выгружается |
BeginCommand | Команда запущена из командной строки AutoCAD |
BeginFileDrop | Файл положен на рабочее пространство AutoCAD |
BeginLisp | Вычисляется Lisp-выражение |
BeginModal | Модальное диалоговое окно собирается отобразиться. |
BeginOpen | Чертеж собирается открыться |
BeginPlot | Чертеж отправляется на печать |
BeginQuit | Сессия AutoCAD собирается завершиться |
BeginSave | Документ отправле на сохранение |
EndCommand | Команда завершает исполнение |
EndLisp | Lisp-выражение вычислено |
EndModal | Модальный диалог отклонен. |
EndOpen | Чертеж открыт |
EndPlot | Чертеж напечатан |
EndSave | Чертеж сохранен |
LispCancelled | Вычисление Lisp-выражения прервано |
NewDrawing | Создан новый чертеж |
SysVarChanged | Изменено значение системной переменной |
WindowChanged | Окно минимизировано или максимизировано |
WindowMovedOrResized | Окно перемещено или изменен его размер |
Хотя MRU + утилита, показанная здесь только как доказательство концепции, она демонстрирует все схемы, которые вы были бы должны делать с любой утилитой для AutoCAD. Autodesk вложил много усилия в создании VBA как первоклассной средой окружения для AutoCAD.