Опубликован: 21.02.2012 | Уровень: специалист | Доступ: свободно
Лекция 7:

Интегрированная среда разработки VBA

< Лекция 6 || Лекция 7: 123 || Лекция 8 >

Создание кода VBA

Термины и определения

Прежде всего, нужно познакомиться с определением терминов и компонентов языка VBA.

Термин Определение
Процедура Именованный код, выполняющий определенные действия. Процедура может быть подпрограммой, функцией или свойством
Проект Набор форм и модулей
Модуль Набор подпрограмм, функций и объявлений, связанных друг с другом и выполняющих конкретную задачу
Форма Контейнер визуальных компонентов (кнопки, поля ввода и пр.)
Подрограмма Не возвращающая значение процедура на языке VBA
Функция Возвращающая значение процедура на языке VBA
Свойство Определяющая значение (свойство) объекта процедура на языке VBA
Объявление Один или несколько невыполняемых операторов, именующих константы или переменные и определяющих их атрибуты (например, тип данных)
Макрос Общедоступная подпрограмма, которая может быть непосредственно выполнена пользователем
Создание процедуры

Проект VBA представляет собой файл с расширением dvb, в котором хранится весь код. Проект состоит из компонентов: процедур, диалоговых окон, форм и пр.Процедуры помещают в один или нескольких модулей. Окно модуля можно вставить, нажав на стрелку кнопки Insert (рис. 7.3).

Вставка модуля и процедуры

увеличить изображение
Рис. 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
  1. Любой текст, начинающийся с апострофа, является комментарием.
  2. В одном проекте может быть несколько модулей. В одном модуле может быть несколько процедур. Ключевое слово Sub указывает на начало новой подпрограммы, как именованного фрагмента кода. Следующее слово Box - имя подпрограммы. В круглых скобках должны быть указаны параметры, если они передаются процедуре. Если параметров нет, то скобки оставляют пустыми.
  3. Объявлять переменные можно с помощью ключевого слова Dim. DCenter - это переменная, содержащая координаты центра параллелепипеда. Выражение (0 To 2) означает, что переменная содержит три значения - для координат X,Y,Z. При объявлении переменных указывается их тип. Double - вещественный тип данных, вычисляемых с двойной точностью. Подходит для большинства координат.
  4. Для задания значений длины, ширины и высоты параллелепипеда создаются переменные dLength, dWidth, dHeigh. Так как они объявлены переменными типа Double, то для удобства восприятия программы перед именами этих переменных добавлена буква d.
  5. Переменная MyBox объявлена принадлежащей типу Acad3DSolid. Информация о типах данных AutoCAD может быть найдена в окне Object Browser или в окне AutoCAD по команде Help - Additional Resources - Developer Help - Contents - ActiveX and VBA Reference - Object Model. Значением переменных этого типа являются объекты чертежа.
  6. Далее объявленным переменным присваиваются численные значения. Символ решетки # используется для указания двойной точности значений с плавающей точкой. Задание повышенной точности очень важно для всех чертежей. Именно поэтому и существует режим объектных привязок.
  7. Оператор Set используется для присвоения переменной некоторого значения. В нашем примере переменной MyBox присваивается значение типа Acad3DSolid, возвращаемое методом AddBox (dCenter, dLength, dWidth, dHeight) . Этот метод принадлежит объекту ModelSpace, который, в свою очередь, принадлежит объекту ThisDrawing. Указывать еще более высокий по иерархии объект нет необходимости, так как и чертеж, и редактор VBA, оба находятся в приложении AutoCAD.
  8. Команда VPoint используется для изменения точки обзора, - иначе параллелепипед будет выглядеть как квадрат. Пробел между числами и закрывающей кавычкой определяет конец команды. Он эквивалентен нажатию клавиши ENTER при ручном вводе команд или символу "" пустых кавычек в процедурах AutoLISP.
  9. Подпрограмма закрывается оператором End Sub.

Имя модуля можно задать в окне свойств Properties. Чтобы сохранить файл проекта, щелкните на кнопке Save панели инструментов среды VBA. При этом откроется диалоговое окно Save as. Выберите каталог, включенный в список маршрутов поддержки AutoCAD.

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

  • набрать в командной строке VbaLoad;
  • выделить команду Tools - Macro - Load Project.

При загрузке программа просит подтвердить намерение подключить макросы.

Запуск загруженной процедуры можно произвести двумя способами:

  • набрать в командной строке VbaRun;
  • выделить команду Tools - Macro - Macros.

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

Задание 7.1

Создание, сохранение и запуск процедур

  1. Создайте новый чертеж. По команде Tools - Macro - Visual Basic Editor откройте редактор процедур.
  2. Вставьте модуль по команде Insert - Module. Дайте ему имя TORUS. Вставьте процедуру по команде Insert - Procedure. Установите тип Sub, имя DrawTorus, область видимости - Public.
  3. Введите следующий код:

    ' Вставка тора на чертеж
    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.

< Лекция 6 || Лекция 7: 123 || Лекция 8 >
Алексей Тимонин
Алексей Тимонин
Алексей Потапкин
Алексей Потапкин

Здравствуйте.

Подскажите, пожалуйста, каким образом можно передать параметры в макрос написанный в Autocad на VBA? Например, есть процедура, которая отрисовывает заштрихованный прямоугольник (см. ниже). Как её изменить, чтобы на входе от пользователя требовалось ввести также в качестве параметров координаты углов прямоугольника?

Public Sub DrawHatchedBox()

...

End Sub