Макросы vba в автокаде что это

от admin

Макросы vba в автокаде что это

Загрузка проекта VBA осуществляется командой VBALOAD. После загрузки модули и макросы проекта становятся доступными в диалоговом окне «Макросы».

В отличие от приложений Microsoft, которые используют для хранения проектов, макросов и программ VBA непосредственно документы, AutoCAD для этих целей использует специальные файлы с расширением .dvb. Это обеспечивает возможность взаимодействия интерфейсов VBA с AutoCAD аналогично тому, как это делается в AutoLISP и ObjectARX. Благодаря тому, что проекты VBA хранятся в отдельных файлах, в одном сеансе AutoCAD приложения VBA могут открывать и закрывать различные чертежи.

Загрузка проекта VBA осуществляется командой VBALOAD . После загрузки модули и макросы проекта становятся доступными в диалоговом окне «Макросы». Для запуска модуля VBA служит команда VBARUN . Если не загружено ни одного проекта VBA, данные опции недоступны. При выводе процедур в списке с именами макросов используется следующий синтаксис:

В диалоговом окне «Макросы» перечнем отображаемых в списке модулей можно управлять с помощью списка «Макросы из».

Запуск макрокоманды VBA из командной строки

С помощью команды -VBARUN можно запустить макрокоманду из командной строки. Это позволяет запускать макрокоманды VBA из командной строки, сценариев и других сред программирования AutoCAD. Единственным аргументом команды должно быть имя модуля и макроса 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-то основной инструмент у инженера.

Макросы — это просто и полезно. Пост первый, вступительный ⁠ ⁠

Я долго вынашивал идею писать посты на тему макросов VBA в AutoCAD и Office, и решил все-таки попробовать.

Несмотря на то, что Microsoft уже давно заявил, что перестал развивать Visual Basic, VBA все еще пользуется спросом, что нет-нет, да доказывают мне окружающие, в том числе и пикабушники (@genrix4444 и @Alex0STR, привет!).

Я предлагаю вам учиться со мной на примерах из реальных задач.

Пишите мне о своих проблемах, и мы будем их решать. Вы получите нужный макрос и навык, а я — идею для поста.

Начнем мы сегодня с того, что определимся, зачем вообще могут пригодиться макросы на VBA, как их запускать и писать самим, а пример сегодня возьмем из AutoCAD.

Но сначала кое-что важное:

Материалы данного поста созданы непрофессиональным программистом.

Я не претендую на гордое звание преподавателя, коуча или сенсея.

Я буду показывать решения, которые просто будут работать.

Критика и советы горячо приветствуются.

При, по крайней мере, написании поста ни один настоящий программист не пострадал.

А теперь поехали!

1. Что такое VBA? Зачем оно человечеству?

VBA — Visual Basic for Applications — очень простой язык программирования, на котором можно писать макросы. Макросы – это небольшие программы, которые будут делать скучные и нудные вещи за вас. Или хотя бы делать их не такими скучными и нудными.

Самые популярные программы, которые поддерживают макросы VBA сейчас — AutoCAD и MS Office (Excel, Word и т.д.). Если вы работаете в одной их них (или всех), то мои посты могут вам пригодиться.

2. Как понять, что вам нужен макрос?

Если вы заметили, что в вашей работе в офисе или автокаде больше механической, чем умственной работы – нужен макрос. Если какие-то манипуляции вы проводите раз за разом, и они очень похожи – нужен макрос.

Появление макроса сделает вашу работу проще, у вас освободится время, чтобы поспать работать быстрее или играть в танки работать более качественно.

3. Что нужно, чтобы использовать макросы в AutoCAD? А в Excel, Word и т.д.?

Нужно установить эти программы с поддержкой VBA, либо установить отдельно. Если у вас будут сложности, пишите в комментариях, и я сделаю подробную инструкцию в одном из следующих постов.

4. Мне прислали макрос для авткада VBA в формате .dvb. Как его запускать?

Для этого нужно загрузить макрос в автокад.

Это делается во вкладке «Управление» кнопкой «Загрузить приложение», вот тут:

Макросы - это просто и полезно. Пост первый, вступительный Макрос, Vba, AutoCAD, Microsoft Excel, Урок, Длиннопост

Макрос будет работать пока вы не закроете автокад. Выбирать файл нужно тут:

Макросы - это просто и полезно. Пост первый, вступительный Макрос, Vba, AutoCAD, Microsoft Excel, Урок, Длиннопост

Если вас это не устраивает, и вы хотите, чтобы все примочки из этого макроса были отныне с автокадом навсегда, пока форматирование не разлучит их, то добавьте его в список автозагрузки (кнопка «Приложения» под портфельчиком с надписью «Автозагрузка»).

Чтобы автокад не пугал, что макрос неизвестно откуда и что «может ну его?», лучше папку, в которой лежит dvb, добавить в «Доверенные местоположения», вот тут:

Макросы - это просто и полезно. Пост первый, вступительный Макрос, Vba, AutoCAD, Microsoft Excel, Урок, Длиннопост

Теперь можно нажать кнопку «Запустить макрос VBA», выбрать, собственно, что запускать, и нажать «Выполнить»:

Макросы - это просто и полезно. Пост первый, вступительный Макрос, Vba, AutoCAD, Microsoft Excel, Урок, Длиннопост

Как видно, в списке тут прописано, из какого файла запускается макрос, потом после «!» идет имя модуля (подробнее о них – ниже), чаще он один на файл, и название «команды».

В моем случае файл запускает «draw_XY» из Module1 файла UTILS.dvb.

Если кому интересно, оно просто подписывает координаты X и Y в точке, в которую пользователь тычет мышкой.

Так вот, все, что произойдет после нажатия кнопки «Выполнить», решается программным кодом. Ничего сложного там нет, смелее читайте дальше. Я смог, и вы сможете.

5. Как написать свой макрос для AutoCAD?

Для начала нужно создать новый проект. Для этого нужно в командной строке автокада ввести VBAMAN (вы стали свидетелем рождения нового супергероя), либо мышкой нажать на список открыть «Диспетчер VBA» вот тут:

Макросы - это просто и полезно. Пост первый, вступительный Макрос, Vba, AutoCAD, Microsoft Excel, Урок, Длиннопост

В появившемся окне, нужно нажать кнопку «Новый», тогда у вас появится строка Global# (в моем случае Global10):

Макросы - это просто и полезно. Пост первый, вступительный Макрос, Vba, AutoCAD, Microsoft Excel, Урок, Длиннопост

Это и есть наш новый проект. Пока он не сохранен в файл нигде, поэтому так странно называется и путь к нему не указан.

Теперь нажмем кнопку «Редактор Visual Basic», и увидим что у него, проекта, внутри.

Макросы - это просто и полезно. Пост первый, вступительный Макрос, Vba, AutoCAD, Microsoft Excel, Урок, Длиннопост

А внутри – пустота. Есть только объект «ThisDrawing», который создается по умолчанию. Его даже не удалить (и не надо). Можно писать код прямо туда, но лучше делать отдельный модуль под отдельный набор функций (для чего – расскажу позже, когда это станет легче объяснить). Для этого на папку «AutoCAD Objects» нажимаем правой кнопной, выбираем «Insert – Module».

Макросы - это просто и полезно. Пост первый, вступительный Макрос, Vba, AutoCAD, Microsoft Excel, Урок, Длиннопост

Теперь у нас есть отдельный модуль. Самое время разобраться целиком с окошком редактора VBA.

Макросы - это просто и полезно. Пост первый, вступительный Макрос, Vba, AutoCAD, Microsoft Excel, Урок, Длиннопост

1 – Структура проекта. Там всегда будет объект «ThisDrawing» (он тоже своего рода модуль). Еще туда можно надобавлять модулей и форм. Формы – это привычные нам окошки с кнопками, галочками и всем подобным. Окошки – это основная фишка Visual Basic (он поэтому так и называется), с ними оно, конечно, интереснее, но будем разбираться в следующих постах (если хотите вообще).

2 – Свойства выбранного объекта. В нашем случае единственный объект – модуль. Его единственное свойство – его имя. По щучьему велению я переименовал его в EasyMacro1.

Все, что находится правее 1 и 2 – редактор самого программного кода. Считай блокнот, только специальный.

3 – Список объектов внутри модуля. У нас их там нет, поэтому у нас только строка «(General)». Если вы выберите объект «ThisDrawing» (два раза щелкаем левой кнопкой), то там у нас будет еще «AcadDocument».

4 – Список процедур, функций и событий (те же процедуры) этого объекта. У нас оптяь только «(Declarations)». И теперь самое время сказать:

Какие еще процедуры, какие еще функции? Вы бы еще про переменные написали тут!

Вот и приехали. Теперь начинается само программирование.

Для начала чуть-чуть теории, определимся с тем, кто как называется, а потом начнем писать сами, и станет понятно.

VBA – процедурный язык программирования. Все, что он делает – выполняет по порядку, строчка за строчкой, либо процедуру, либо функцию. Обе эти штуки – наборы команд, и единственная разница между ними в том, что процедура просто выполняет какие-то действия и уходит в закат, а функция еще и выдает какой-то результат (число или строку, например).

И внутри всего этого хаоса могут быть переменные – заранее застолбленные «имена», по которым компьютер будет хранить значения, например, числа, строки, опять-таки, или даты, например.

Начнем с самой идеи макроса, обдумаем в голове, что он будет делать и для чего.

Вот есть у меня чертеж. Пусть это будет, условно, три электрических подземных кабеля, начерченных в плане (вид сверху) в миллиметрах.

Макросы - это просто и полезно. Пост первый, вступительный Макрос, Vba, AutoCAD, Microsoft Excel, Урок, Длиннопост

Вот мы видим, что у одной из «веток» длина 52083.65 миллиметра, что, считай, 52 метра 8 сантиметров.

И представим, что кто-то мне сказал, что надо подписать длины этих кусочков. А мне лень. Или их очень много. Или и то, и другое.

Я подумал, попил кофейку, и решил написать макрос, который будет в начало каждой «ветки» вставлять текст, в который будет записывать строчку «L = X.XX м».

Для этого я создам процедуру (а мы помним, что она-то как раз что-то там делает), назову ее writeLengths, чтобы было понятно, что она делает.

Для этого я пишу Sub writeLengths() в редакторе кода, и жму Enter. А редактор сам за меня допишет End Sub.

Макросы - это просто и полезно. Пост первый, вступительный Макрос, Vba, AutoCAD, Microsoft Excel, Урок, Длиннопост

Sub – это так в VBA обозначается процедура. Если бы мы хотели написать функцию, то у нас было бы

Function <имяФункции>() … End Function

Все, что мы напишем промеж строк

Sub writeLengths()

и будет теми командами, которые будет выполнять процедура до своего ухода в закат.

В тех круглых скобках, при необходимости, пишут входные параметры. Когда появится в них необходимость, вы быстро поймете, как и зачем их использовать. Сегодня не будем.

А что нам надо? Да только свет в оконце. Нам надо, чтобы макрос брал все полилинии в чертеже (пускай пока вообще все полилинии, ок?), узнавал, какой они длины (ДАННЫЕ УДАЛЕНЫ) и вставлял в чертеж текст с ее значением.

Код будет очень простой, а он будет выглядеть вот так:

Макросы - это просто и полезно. Пост первый, вступительный Макрос, Vba, AutoCAD, Microsoft Excel, Урок, Длиннопост

Первые две строки – это объявление переменных. Оно всегда начинается с ключевого слова Dim, потом идет имя переменной, затем ключевое слово As и ее тип.

Имена переменных не должны повторяться, не должны начинаться цифры, не должны содержать пробелов и не должны быть ключевыми словами. Еще хорошо бы, чтобы они были понятны хотя бы вам (а лучше всем, кто может увидеть ваш код).

Типов в VBA бывает не так много, какой когда использовать – отдельная микронаука. Для наших скромных целей давайте пока использовать:

Integer – целое число: 1, 42, -12, 0 и т.д. VBA ограничивает их значениями от -2 147 483 648 до 2 147 483 647. Нам хватит.

Double – дробное число: 3.14, 0.0, -0.124 и т.д. Диапазон значений у них очень большой, даже писать не буду. Вам хватит, можете поверить.

String – строка текста. Пишется всегда, обязательно в кавычках: “СТРОКА”.

Boolean – логическая переменная. Ее значение может быть только либо Труъ True либо False. Одно или другое, просто и понятно.

Теперь еще раз посмотрите на код и на меня. Сразу все не так пошло, правда?

У нас объявлена переменная point, ее тип – Double. Но что это за скобки, почему там пробелы?

Дело в том, что это point – это не одно значение Double, а целый их массив.

Массив – это целый набор значений какого-то конкретного типа, со своим размером.

В нашем случае в нем есть три элемента, первый начинается с нуля. В скобках написано (0 to 2), что значит что в массиве будут элементы от 0 до 2, то есть 0, 1, 2. Чтобы получить конкретное число, нужно написать его номер в массиве, например point(1). Если написать point(4), то произойдет апокалипсис ошибка после запуска макроса. Можете попробовать.

Массив (для примера из трех элементов) можно задать так:

<название массива>(0 to 2) as <тип>

<название массива>(2) as <тип>

<название массива>(1 to 3) as <тип>

тогда его элементы будут считаться от 1.

Мы сделали от 0, потому что по умолчанию делается так, и это поможет нам избежать путанницы. Ниже увидите в чём.

Дальше у нас идет цикл For each … Next.

Если знание английского языка позволяет, то можно понять, что там творится просто прочитав.

А творится вот что:

объекта (это, кстати, тоже переменная, просто мы ее отдельно не объявляли вначале, потому что кроме как внутри цикла она нам больше нигде не нужна)

«этого чертежа» (имеется в виду тот, который был отрыт, когда мы запустили макрос)

пространстве модели (вы ведь знаете, что кроме модели еще есть листы в автокаде, да?)

выполняются какие-то действия.

Действия, как вы уже поняли, находятся между строк

For Each object In ThisDrawing.ModelSpace

Так как в пространстве модели могут быть разные объекты: полилинии, круги, отрезки, текст, штриховки и т.д., нам нужно как-то определять, какой из них – полилиния. И если это полилиния, тогда уже с ней что-то делать.

Это можно сделать с помощью условного оператора:

If <условие> then … End if

В нашем случае берется object.ObjectName (это такое «внутреннее текстовое название» объектов в автокаде, для полилиний оно всегда будет равно «AcDbPolyline»). Если оно как раз равно «AcDbPolyline», то у нас полилиния.

Еще, кстати, условный оператор может выглядеть так:

If <условие> then

В этом случае действия1 выполнятся, если условие верно (то есть равно true, там как раз Boolean), а если не верно (равно false), то выполнятся действия2.

Теперь разберем, что будет происходить, если макрос нашел полилинию (то есть, условие выполнилось).

Мы хотим записать в массив point координаты X и Y первой точки найденной полилинии, чтобы туда вставлять текст.

object.Coordinate(0) – это как раз они — координаты первой точки объекта object (ага, масло масляное, соус сальса). Вершины полилинии тоже считаются с нуля, да. Про это я и говорил выше, когда объяснял, зачем я сделал массив, элементы которого начинается с нулевого. Так вот, эти координаты (X, Y) представлены тоже в виде массива Double (дробных чисел). И тоже считаются от нуля.

Поэтому мы берем первый элемент массива point – point(0) и приравниваем, присваиваем ему значение первого элемента массива object.Coordinate(0) — object.Coordinate(0)(0).

Еще раз: получить массив с координатами первой вершины мы смогли при помощи записи object.Coordinate(0), а уже потом дописываем опять (0), чтобы получить его первый элемент.

Читать:
App release apk что это за приложение

Далее уже второму элементу массива point присвоили значение второго элемента массива object.Coordinate(0) — point(1) = object.Coordinate(0)(1)

потому что мы чертим в 2D и координата Z нас не волнует совсем.

А вот дальше – самое интересное.

С помощью ключевого слова Call мы вызываем метод (тоже, считай, процедура) AddText, который есть у пространства модели «этого чертежа».

То есть, получается

Call ThisDrawing.ModelSpace.AddText(. )

В скобках через запятую мы пишем параметры, с которыми оно вызывается:

значение текста, который надо написать (в нашем случае мы туда отправляем object.Length – длина объекта)

точка, в которую этот текст вставляется (наш массив point)

и высота текста (я выбрал 200 единиц, чтобы его было видно без микроскопа сильного приближения).

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

Кстати, из окна редактора VBA можно запустить нажав зеленую стрелочку вверху (рядом с кнопками «Пауза» и «Стоп»).

Макросы - это просто и полезно. Пост первый, вступительный Макрос, Vba, AutoCAD, Microsoft Excel, Урок, Длиннопост

А получилось вот что. Длина проставилась в первой точке. Но она проставилась в миллиметрах. И после запятой знаков слишком много.

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

Делается это так:

Format(<выражение>, <формат выражения>)

Формат выражения – это тоже строка, но которая описывает, как должно выглядеть значение.

Например, если мы напишем “#”, то получим только целые части чисел. Было 1,23 стало 1.

Если написать “#.#”, то получим один знак после запятой.

Если вместо решетки писать нули, то они как бы занимают место. То есть с форматом “00.00” число 1.2 будет написано как «01.20«. Причем если у нас было бы не 1.2, а 101.2, все рано получилось бы «101.2«. До запятой знаки не отрезаются. Логично же, это уже совсем другое число получится.

Еще в формат можно дописывать другие символы, они просто пропишутся как есть. Можно, например, написать “L = 0.00 м”, и мы получим из числа 52083.6472… запись «L = 52083.65».

А это как раз то, что нам нужно, только нам нужно еще и в метрах это все. Для этого object.Length надо просто разделить на 1000.

В общем, исправим код вот так:

Call ThisDrawing.ModelSpace.AddText(Format(object.Length / 1000, «L = 0.00 м»), point, 200)

И результат получим такой:

Макросы - это просто и полезно. Пост первый, вступительный Макрос, Vba, AutoCAD, Microsoft Excel, Урок, Длиннопост

Макрос в определенной мере готов, осталось его сохранить, нажав Ctrl+S, либо “File – Save Global#”.

Конечно, такой макрос дает не очень удобный результат.

Можно сделать так, чтобы текст разворачивался вдоль линии, и вставлялся в ее середину. И в отдельный слой. И другим цветом, например.

Но пост получился уже достаточно объемный из-за долгого вступления, поэтому на этом пока остановимся.

Следующий пост, наверное, напишу тоже на тему автокада, потому что придумать что-то простое, но полезное для Excel пока не удается.

Буду рад видеть в комментариях ваши мнения, просьбы и советы.

Если вы поняли все, но сели писать сами, и у вас ничего не получается — не переживайте. Просто практикуйтесь, ставьте цели и добивайтесь их, а я постараюсь помочь 🙂

Мы коллеги, прочел пост, почувствовал родственную душу в лице Вас.

Пользуюсь АвтоКАД ом уже 3 года. Черчу довольно продуктивно. Чувствую что настал потребность облегчить рутинную работу и ВБА именно та програма которая поможит сделать это. Идей много, осуществить не удается (недостаточно владею ВБА). Буду рад дружить с Вами и сделать кое что с Вашей помошью. Если это возможно , то был бы рад связатся свами через ВАЙБЕР.

Мне кажется, если человек в состоянии осилить Бейсик, то и азы C# осилит. Или уж хотя бы Besic.Net . Так что нет смысла откапывать покойного VBA, чтоб написать крайне малофункциональные и ооочень тормозные макросы. По теме выбора на чем писать дополнения к Автокаду — вот статья: https://avcprg.blogspot.com/2020/10/blog-post_8.html

EXCEL — ЭТИ СТРАШНЫЕ МАКРОСЫ – НАЧАЛО⁠ ⁠

Я решил с двух ног ворваться в тему макросов.

EXCEL - ЭТИ СТРАШНЫЕ МАКРОСЫ – НАЧАЛО Макрос, Microsoft Excel, Обучение, Офис, Работа, Длиннопост

Кто-то про них слышал, кто-то даже видел, отдельные сверхразумы их даже использовали. Сегодня будет ознакомительный пост: что это вообще такое и как с этим начать работать. Обратите внимание – этот пост тех, кто не знает, что такое макросы и никогда с ними не работал

Первым делом нужно включить вкладку «Разработчик». По умолчанию в Excel ее спрятали, чтобы не взорвать мозг юзерам. Идем в Параметры -> Настройка ленты -> Основные вкладки -> Разработчик (поставить галочку).

EXCEL - ЭТИ СТРАШНЫЕ МАКРОСЫ – НАЧАЛО Макрос, Microsoft Excel, Обучение, Офис, Работа, Длиннопост

Теперь идем в эту вкладку, нажимаем «Записать макрос» выбираем имя жмакаем «ок». Все, теперь любые действия в Excel надежным образом записываются.

EXCEL - ЭТИ СТРАШНЫЕ МАКРОСЫ – НАЧАЛО Макрос, Microsoft Excel, Обучение, Офис, Работа, Длиннопост

Давайте теперь что-то сделаем. На пример поменяем заливку ячейки А1, в ячейку A2 напишем значение «Мама, я программист», а в ячейке А3 пропишем формулу текущей даты «=Сегодня()»

EXCEL - ЭТИ СТРАШНЫЕ МАКРОСЫ – НАЧАЛО Макрос, Microsoft Excel, Обучение, Офис, Работа, Длиннопост

Останавливаем запись макроса. Нажимаем иконку «Макросы», выбираем наш макрос как мы его обозвали, нажимаем кнопку «изменить».

EXCEL - ЭТИ СТРАШНЫЕ МАКРОСЫ – НАЧАЛО Макрос, Microsoft Excel, Обучение, Офис, Работа, Длиннопост

Появляется окно Microsoft Visual Basic for Applications. Кстати оно также вызывается комбинацией клавиш (Alt + F11) У меня почему-то вызывается только левым Altом, а правым нет, видимо намекая на то что для написания макросов лучше иметь 2 руки (хотя я и одной нажать могу). Появился редактор языка VBA – это язык, который написан специально под офис чтобы на нем писать макросы. В основном окне видим саму эту запись, которую автоматически сделал Excel.

Sub Макрос2()
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range(«A2»).Select
ActiveCell.FormulaR1C1 = «Мама, я программист»
Range(«A3»).Select
ActiveCell.FormulaR1C1 = «=TODAY()»
Range(«A4»).Select
End Sub

Такой инструмент автоматической записи называется макрорекордер, по началу он хорошо помогает вообще понять, что происходит. Теперь давайте разберемся как выглядит записанный макрос (записанный макрос у автора этой статьи может различаться с записанным макросом у вас поскольку форма записи с макроса зависит от последовательности нажатий, способах ввода информации и криворукости пользователь, в любом случае автор этой статьи снимает с себя всю ответственность за любые действия которые привели или могут привести к изменению годовых отчетов, искажению пространственное – временного континуума и прочих непредвиденных вымираний.)

Теперь давайте разбираться что делает этот макрос

Sub Макрос2()
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With

(Весь этот кусок от начала говорит нам о том, что с тем элементом что был выделен ранее происходит некоторое дерьмо, в том числе изменение цвета. Вот там, где Color = 255. Все остальное это параметры заливки, которые по итогу не менялись, но макрорекордер решил их тоже записать, на всякий. Это связано с внутренними особенностями работы excel как я понял. Вообще привыкайте к тому что макрорекордер пишет много того что потом вообще можно удалить. Конструкция With – End With позволяет делать несколько действий с одним объектом, на пример выше берется объект Selection.Interior, то есть фон выбранной области и ряду параметров этой заливки назначаются конкретные значения. То есть With нужен для облегчения записи кода, чтобы Selection.Interior не писать вначале каждой строчки.

Range(«A2»).Select –выделяем ячейку «A2»
ActiveCell.FormulaR1C1 = «Мама, я программист» – пишем в ячейку значение
Range(«A3»).Select – выделяем ячейку «А3»
ActiveCell.FormulaR1C1 = «=TODAY()» –пишем в ячейку формулу
Range(«A4»).Select – зачем то выделяем ячейку А4.
End Sub

Теперь при создании нового листа и запуске этого макроса он будет делать все то же самое.

Тут стоит понимать, что половину того что записал макрос можно опустить, так как нам важен результат, а не путь по которому к этому результату пришли, а макрорекордер записывает именно путь. На пример вместо всей конструкции With можно записать

так как мы точно знаем, что хотим поменять только цвет в ячейке А1. Также вместо того чтобы выделять ячейку, а потом в активной ячейке писать формулу можно сразу записать нужное значение в ячейку

Range(“A2”).Value = ”Мама, я программист”

или писать формулу как в третей ячейке

С формулами и значениями лично мне не понятно, как excel их интерпретирует, но в макрорекордре он записывает любой ввод в ячейку как ввод формулы. Благо лично у меня при написании макросов не возникает необходимости писать формулы в ячейки. На пример вместо вставки формулы как это было выше можно написать Range(“A3”).Value = Date(), тогда макрос вставит сразу текущую дату в ячейку как значение.

Опытные макроделы пишут макросы сразу без их записи макрорекордером, но это полезный инструмент для самостоятельного изучения при написании макросов: если не знаешь, что как делается в VBА то запускаешь и делаешь, потом смотришь что он там написал.

Теперь давайте напишем какой ни будь полезный макрос, я буду писать строчки и как можно подробнее их комментировать. Комментарии от программы отделяются символом «‘», он ставится вначале комментария. Прошу учесть, что я самоучка и многого не знаю, и просто напишу так ка делаю это сам, возможно есть более изящные решения. Напоминаю, что это просто ознакомительный опус для тех, кто не в зуб ногой.

Sub Colorization()
‘начало нашего макроса и его название
Dim x As Integer
‘объявляем переменную х типа интеджер, это тип для целых чисел от -32 768 до 32 767 (2 байта),
‘она нам нужна для перебора ячеек
For x = 1 To ActiveSheet.UsedRange.Rows.Count
‘перебираем х от 1 до конца использованной части листа, то есть не весь лист, а там где есть данные.
‘Тут цикл For повторяется от этой строки до строки Next x, которая прописана ниже
If Cells(x, 1).Value = «красный» Then Cells(x, 1).Interior.Color = RGB(255, 0, 0)
‘если значение в ячейке равно «красный» то закрашиваем ячейку в красный цвет. Функция If выполняет часть
‘после Then если условие между If и Then верно. Так как у нас необходимое действие занимает одну
‘строку можно писать в таком виде, если же действий несколько применяется конструкция:
‘If … Then
‘…
‘…
‘End If
If Cells(x, 1).Value = «зеленый» Then Cells(x, 1).Interior.Color = RGB(0, 255, 0)
‘как выше только в зеленый цвет
If Cells(x, 1).Value = «синий» Then Cells(x, 1).Interior.Color = RGB(0, 0, 255)
‘в синий цвет
Next x ‘берем следующее значение х, конец цикла For, который мы начали выше
End Sub ‘конец макроса
Как работает этот макрос: берет первый столбец, сначала 1 ячейку, смотрит что в ней написано, и если это равно «красный», «зеленый» или «синий», то красит фон ячейки в этот цвет, если нет по пропускает. Потом берет вторую и т. д. до конца активной части текущего листа.
Для проверки работы макроса нам нужен лист, где в первом столбце будут случайным образом прописаны цвета «красный», «зеленый», «синий». Запускаем макрос – когда он отработает ячейки будут раскрашены:

EXCEL - ЭТИ СТРАШНЫЕ МАКРОСЫ – НАЧАЛО Макрос, Microsoft Excel, Обучение, Офис, Работа, Длиннопост

Некоторые пояснения: если не писать просто Cells то макрос будет делать все в активном листе активного окна. Но макрос может идти и в другие листы, файлы, даже в другие приложения офиса, но об этом не сегодня.

После того, как макрос поработал с документом, не удастся кнопкой «назад» вернуть все изменения, так что, если данные важны, то сохраняйте их отдельно и макросом работайте с копией, макросы беспощадны.

Итак, на этом пока все. Надеюсь теперь те, кто никогда не видел макросов получат о них начальное представление. Дальше буду писать про более практичное применение.

AutoCAD VBA

Microsoft Visual Basic for Applications (VBA) является объектно-ориентированным языком программирования с собственной средой разработки и обладает широкими возможностями. Основное отличие VBA от VB (Visual Basic) состоит в том, что VBA работает одновременно с AutoCAD, предоставляя быструю среду для программного управления AutoCAD.

Основные сведения о AutoCAD VBA

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, но и обмениваться данными с другими приложениями.

204 | Глава 7 Введение в интерфейсы программирования

Результатом интеграции VBA и AutoCAD является легкое в использовании средство визуального программирования, которое можно использовать для настройки AutoCAD. С его помощью можно, например, разработать приложение, которое автоматически извлекает значения атрибутов, вставляет результаты в книгу Excel и выполняет другие требуемые манипуляции с данными.

Принципы программирования на VBA для AutoCAD основываются на трех базовых составляющих. Первой составляющей является сама программа AutoCAD, которая обладает большим набором объектов, различных данных и команд. AutoCAD является приложением с открытой архитектурой и имеет интерфейсы различных уровней.

Для эффективного использования VBA желательно иметь навыки программирования под AutoCAD. Однако следует отметить, что положенный в основу VBA объектно-ориентированный подход к программированию существенно отличается от используемого в AutoLISP.

Второй составляющей является интерфейс ActiveX Automation, который определяет порядок передачи сообщений (взаимодействия) с объектами AutoCAD. Программирование на VBA требует понимания принципов организации интерфейса

ActiveX Automation. Описание интерфейса ActiveX Automation применительно к

AutoCAD приводится в документации Руководство разработчика ActiveX и VBA (в меню AutoCAD «Справка» нажмите «Дополнительные ресурсы» «Документация для разработчиков»).

Третьей составляющей является, собственно, сама среда VBA. VBA имеет свой собственный набор объектов, ключевых слов, констант и т.д., которые используются при написании, отладке и выполнении программ. В комплект поставки AutoCAD входит обширная справочная система по VBA от Microsoft.

Управление AutoCAD с помощью интерфейса ActiveX/VBA по сравнению с использованием средств API обладает рядом преимуществ.

■ Скорость. Приложения ActiveX работают быстрее программ AutoLISP.

■ Простота в использовании. Язык и среда разработки VBA легки в освоении и использовании. Установка VBA производится вместе с AutoCAD.

■ Взаимодействие с приложениями Windows. ActiveX и VBA разработаны для использования в приложениях Windows и предоставляют прекрасные возможности для организации взаимодействия и обмена данными между различными приложениями.

■ Быстрота разработки. Благодаря быстроте проектирования интерфейса приложений с помощью VBA, данная среда может служить прекрасным средством для создания приложений-прототипов, даже если окончательная реализация планируется на другом языке программирования.

■ Распространенность. Во всем мире миллионы программистов пользуются языком Visual Basic. Наличие AutoCAD ActiveX/VBA дает возможность выполнять

AutoCAD VBA | 205

настройку AutoCAD и разрабатывать для него приложения программистам, уже владеющим языком Visual Basic 6 или собирающимся его изучать.

Использование приложений AutoCAD 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

Для выполнения макросов из командной строки AutoCAD следует вызвать команду -VBARUN (дефис перед именем команды VBARUN означает вызов варианта команды, использующего интерфейс командной строки). Макросы VBA можно вызывать из командной строки, сценариев, а также из других средств программирования AutoCAD. Единственным аргументом команды должно быть имя модуля и макроса VBA, отделенные точкой ( модуль . макрос ). Образец вызова выглядит следующим образом:

Related Posts