Урок 1 по VBA — знакомство с Visual Basic for Applications

Урок 1 по VBA — знакомство с Visual Basic for Applications Макросы на VBA

В это статье мы кратко познакомимся с языком VBA, который позволяет создавать макросы в программных продуктах Microsoft Office. Макросы – некий программный код, который позволяет реализовывать за вас поставленную задачу. В отличии от прикладных программ, макросы VBA как таковые не могут выполняться самостоятельно. Язык VBA – Visual Basic for Applications является родственником таких языков как VBScript, Visual Basic или простой Basic. Синтаксис и общие правила программирования практически идентичны.

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

Отличия VBA от VBScript

Графический интерфейс – редактор VBA предоставляет минимальный набор объектов для создания графического интерфейса. Вы можете добавить в проект новую форму и поместить на нее нужные объекты, например, список, кнопку, текстовое поле и так далее. В VBScript для этих целей нужно прибегать к помощи стороннего объекта WindowSystemObject.

Внешние объекты – оба языка позволяют подключать функциональные возможности внешних объектов. Объект – в данном контексте это внешний библиотечный файл с набором методов (функций) и свойств (переменных). Однако, если вы создаете макрос в Word, то объект Word.Application будет доступен автоматически, если макрос работает в документе Excel, то автоматически доступен компонент Excel.Application. В Windows Script Host сценариях эти объекты нужно подключать самостоятельно (сделать ссылку).

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

Практическое применение VBA

И так, открыв любой документ Microsoft Office, например, Word, мы может вызвать встроенный редактор Visual Basic (комбинация клавиш Alt + F11) и приступить к созданию макроса. Как упоминалось выше, в макросах можно подключать функциональные возможности внешних объектов, тем самым, получать доступ к элементам операционной системы, например, файловая система, реестр и так далее. Желательно, что бы в настройках был отключен автоматический запуск макроса при открытии документа, дабы дырявый или зловредный код не натворил лиха.

Однако, на сегодняшний момент, макросы и язык VBA как элементы администрирования теряют свое преимущество. Тот же Microsoft Access, который предназначен для работы с базами данных также практически не используется. Более актуальным является пакет 1С.

Общие синтаксические принципы языка VBA

  • Регистр не играет роли – вы можете прописать оператор как в верхнем, так и в нижнем регистре, или вообще в вперемешку, например, dim, DIM, Dim, разницы нет.
  • Комментарии – для комментирования строки, перед ней прописывается одинарная кавычка или ключевое слово REM.
  • Максимальная длина любого имени (будь то имя переменной, константы или процедуры) составляет 255 знаков.
  • В отличии от JavaScript, Jscript или С языков, в VBA в конце строки с операторами не нужно ставить запятой.
  • Двоеточие – чтобы не прописывать каждый оператор в отдельной строке, их можно с помощью двоеточия прописать в одну строку, например: MsgBox «Строка1» : MsgBox «Строка2»
  • Перенос операторов – если строка с операторами слишком длинная, то ее можно разделить на несколько при помощи символа подчеркивания и знака &, например:
    MsgBox «Это простая» _
    &  «строка»

Для демонстрации работы с макросами напишем такой пример. Откройте документ Microsoft Word и запустите редактор Visual Basic. Вам нужно создать новую форму и новый модуль (макрос). Цель – решение квадратного уравнения с изменяемыми значениями.

На поверхность формы надо добавить три полосы прокрутки и две текстовые метки. В редакторе кода для формы пропишите:

OptionExplicitSub Get_Result()Dim MyA AsByte, MyB AsByte, MyC AsByteDim D, x, x1, x2, msg    MyA = ScrollBar1.Value: MyB = ScrollBar2.Value: MyC = ScrollBar3.Value    Label1.Caption = MyA & "x*x + " _                    & MyB & "x + " _                    & MyC & " = 0" ' находим дискриминантD = MyB ^ 2 - 4 * MyA * MyC 'Если дискриминант равен нулую - одно решениеIf D = 0 Then     x = MyB / (2 * MyA)     msg = "Уравнение имеет одно решение, x ровно: " & x'Если дискриминант больше нуля - два решенияElseIf D > 0 Then     x1 = (-MyB + Sqr(D)) / (2 * MyA)     x2 = (-MyB - Sqr(D)) / (2 * MyA)     msg = "Уравнение имеет два решения" & vbCrLf & "x1 ровно: " & x1 & vbCrLf & "x2 ровно: " & x2'Если дискриминант меньше нуля - нет решенияElse     msg = "Нет решения (комплексные числа)"EndIf    Label2.Caption = msgEndSub PrivateSub ScrollBar1_Change()    Call Get_ResultEndSubPrivateSub ScrollBar2_Change()    Call Get_ResultEndSubPrivateSub ScrollBar3_Change()    Call Get_ResultEndSub PrivateSub UserForm_Initialize()Dim MyA AsByte, MyB AsByte, MyC AsByte    ' параметры полос прокрутки    ScrollBar1.Min = 1    ScrollBar1.Max = 20     ScrollBar2.Min = 1    ScrollBar2.Max = 30     ScrollBar3.Min = 1    ScrollBar3.Max = 40    ' параметры первого текстового поля    Label1.FontSize = 15    Label1.ForeColor = &HFF0000    Label1.TextAlign = fmTextAlignCenter     ' параметры второго текстового поля    Label2.FontSize = 15    Label2.ForeColor = &H6400    MyA = ScrollBar1.Value: MyB = ScrollBar2.Value: MyC = ScrollBar3.Value    Label1.Caption = MyA & "x*x + " _                    & MyB & "x + " _                    & MyC & " = 0"EndSub

Код VBA предельно прост, в процедуре Get_Result происходит проверка текущих значений для полос прокрутки, далее эти значения подставляются в формулу для нахождения дискриминанта. Результат решения будет выводиться на поверхности формы во вторую текстовую метку. Аналогичный пример я разбирал для языка VBScript в этой статье.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий