Интегрированная среда разработки VBA
Создание кода VBA
Термины и определения
Прежде всего, нужно познакомиться с определением терминов и компонентов языка VBA.
Термин | Определение |
---|---|
Процедура | Именованный код, выполняющий определенные действия. Процедура может быть подпрограммой, функцией или свойством |
Проект | Набор форм и модулей |
Модуль | Набор подпрограмм, функций и объявлений, связанных друг с другом и выполняющих конкретную задачу |
Форма | Контейнер визуальных компонентов (кнопки, поля ввода и пр.) |
Подрограмма | Не возвращающая значение процедура на языке VBA |
Функция | Возвращающая значение процедура на языке VBA |
Свойство | Определяющая значение (свойство) объекта процедура на языке VBA |
Объявление | Один или несколько невыполняемых операторов, именующих константы или переменные и определяющих их атрибуты (например, тип данных) |
Макрос | Общедоступная подпрограмма, которая может быть непосредственно выполнена пользователем |
Создание процедуры
Проект VBA представляет собой файл с расширением dvb, в котором хранится весь код. Проект состоит из компонентов: процедур, диалоговых окон, форм и пр.Процедуры помещают в один или нескольких модулей. Окно модуля можно вставить, нажав на стрелку кнопки Insert (рис. 7.3).
Так же может быть в модуле создана базовая процедура. В диалоговом окне Add Insert нужно указать имя новой процедуры, ее тип и область видимости Public или Private. Если процедура определена как Public (открытая, глобальная), то она доступна в других модулях и в диалоговом окне vbarun среды AutoCAD. Процедура, определенная как private (закрытая, локальная) видна только в том модуле, где она определена.
Если установить флажок All local variables as Statics (Все локальные переменные статические), то переменные будут сохранять свои значения и применять их при повторном запуске процедуры.
Рассмотрим синтаксис VBA на примере фрагмента кода, рисующего параллелепипед.
' Вставка параллелепипеда Public Sub Box () 'объявляем переменные для использования в AddBox Dim dCenter (0 To 2) As Double 'массив чисел с плавающей точкой (x,y,z) Dim dLength As Double ' длина Dim dWidth As Double ' ширина Dim dHeight As Double ' высота Dim MyBox As Acad3DSolid ' возвращаемое значение ' задание значений переменных: dCenter (0) = 0# ' # указывает на двойную точность значений dCenter (1) = 0# ' с плавающей точкой dCenter (2) = 0# ' задание размеров параллелепипеда: dLength = 10# dWidth = 20# dHeight = 30# ' создание чертежа параллелепипеда в пространстве модели Set MyBox = ThisDrawing.ModelSpace.AddBox(dCenter, dLength, dWidth, dHeight) ' изменение точки обзора для лучшего осмотра ThisDrawing.SendCommand ("_VPOINT 1,1,1 _Shademode Gouraud ") End Sub
- Любой текст, начинающийся с апострофа, является комментарием.
- В одном проекте может быть несколько модулей. В одном модуле может быть несколько процедур. Ключевое слово Sub указывает на начало новой подпрограммы, как именованного фрагмента кода. Следующее слово Box - имя подпрограммы. В круглых скобках должны быть указаны параметры, если они передаются процедуре. Если параметров нет, то скобки оставляют пустыми.
- Объявлять переменные можно с помощью ключевого слова Dim. DCenter - это переменная, содержащая координаты центра параллелепипеда. Выражение (0 To 2) означает, что переменная содержит три значения - для координат X,Y,Z. При объявлении переменных указывается их тип. Double - вещественный тип данных, вычисляемых с двойной точностью. Подходит для большинства координат.
- Для задания значений длины, ширины и высоты параллелепипеда создаются переменные dLength, dWidth, dHeigh. Так как они объявлены переменными типа Double, то для удобства восприятия программы перед именами этих переменных добавлена буква d.
- Переменная MyBox объявлена принадлежащей типу Acad3DSolid. Информация о типах данных AutoCAD может быть найдена в окне Object Browser или в окне AutoCAD по команде Help - Additional Resources - Developer Help - Contents - ActiveX and VBA Reference - Object Model. Значением переменных этого типа являются объекты чертежа.
- Далее объявленным переменным присваиваются численные значения. Символ решетки # используется для указания двойной точности значений с плавающей точкой. Задание повышенной точности очень важно для всех чертежей. Именно поэтому и существует режим объектных привязок.
- Оператор Set используется для присвоения переменной некоторого значения. В нашем примере переменной MyBox присваивается значение типа Acad3DSolid, возвращаемое методом AddBox (dCenter, dLength, dWidth, dHeight) . Этот метод принадлежит объекту ModelSpace, который, в свою очередь, принадлежит объекту ThisDrawing. Указывать еще более высокий по иерархии объект нет необходимости, так как и чертеж, и редактор VBA, оба находятся в приложении AutoCAD.
- Команда VPoint используется для изменения точки обзора, - иначе параллелепипед будет выглядеть как квадрат. Пробел между числами и закрывающей кавычкой определяет конец команды. Он эквивалентен нажатию клавиши ENTER при ручном вводе команд или символу "" пустых кавычек в процедурах AutoLISP.
- Подпрограмма закрывается оператором End Sub.
Имя модуля можно задать в окне свойств Properties. Чтобы сохранить файл проекта, щелкните на кнопке Save панели инструментов среды VBA. При этом откроется диалоговое окно Save as. Выберите каталог, включенный в список маршрутов поддержки AutoCAD.
Прежде чем запустить процедуру, ее следует загрузить. Загрузку процедуры можно произвести двумя способами:
- набрать в командной строке VbaLoad;
- выделить команду Tools - Macro - Load Project.
При загрузке программа просит подтвердить намерение подключить макросы.
Запуск загруженной процедуры можно произвести двумя способами:
- набрать в командной строке VbaRun;
- выделить команду Tools - Macro - Macros.
В открывшемся диалоговом окне Macros выберите модуль, который хотите запустить, и щелкните по кнопке RUN.
Задание 7.1
Создание, сохранение и запуск процедур
- Создайте новый чертеж. По команде Tools - Macro - Visual Basic Editor откройте редактор процедур.
- Вставьте модуль по команде Insert - Module. Дайте ему имя TORUS. Вставьте процедуру по команде Insert - Procedure. Установите тип Sub, имя DrawTorus, область видимости - Public.
-
Введите следующий код:
' Вставка тора на чертеж Public Sub DrawTorus () 'объявляем переменные для использования в AddTorus Dim dCenter (0 To 2) As Double 'массив чисел с плавающей точкой (x,y,z) Dim dRadius1 As Double ' радиус тора Dim dRadius2 As Double ' радиус трубки тора Dim MyTorus As Acad3DSolid ' возвращаемое значение ' задание значений переменных: dCenter (0) = 0# ' # указывает на двойную точность значений dCenter (1) = 0# ' с плавающей точкой dCenter (2) = 0# ' задание размеров тора: dRadius1 = 10# dRadius2 = 2# ' создание чертежа тора в пространстве модели Set MyTorus = ThisDrawing.ModelSpace.AddTorus(dCenter, dRadius1, dRadius2) ' изменение точки обзора для лучшего осмотра ThisDrawing.SendCommand ("_VPOINT 1,1,1 _Shademode Gouraud ") End Sub
Поскольку эта процедура активна, ее не нужно загружать. Щелкните по кнопке SAVE стандартной панели инструментов и сохраните проект под именем TORUS.dvb в каталоге AutoCAD\Support. Вернитесь в пространство модели. Выберите команду Tools - Macro - Macros. В открывшемся диалоговом окне Macros выберите процедуру DrawTorus и щелкните по кнопке RUN.