Урок 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. Вам нужно создать новую форму и новый модуль (макрос). Цель – решение квадратного уравнения с изменяемыми значениями.

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

Option Explicit
Sub Get_Result()
Dim MyA As Byte, MyB As Byte, MyC As Byte
Dim 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 = "Нет решения (комплексные числа)"
End If
    Label2.Caption = msg
End Sub
 
Private Sub ScrollBar1_Change()
    Call Get_Result
End Sub
Private Sub ScrollBar2_Change()
    Call Get_Result
End Sub
Private Sub ScrollBar3_Change()
    Call Get_Result
End Sub
 
Private Sub UserForm_Initialize()
Dim MyA As Byte, MyB As Byte, MyC As Byte
    ' параметры полос прокрутки
    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"
End Sub

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

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