Организация ввода и вывода сообщений

Подобно многим языкам программирования Visual Basic for Application (VBA) позволяет создать три типа процедур: Sub, Function, Property.

Процедура – это набор описаний и инструкций, сгруппированных для выполнения.

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

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

Процедура Property используется для ссылки на свойство объекта. Данный тип процедур применяется для установки или получения значения пользовательских свойств форм и модулей. Процедуры облегчают хранение и применение информации, если использовать их сначала для сохранения в свойстве этой информации, а затем для ее чтения.

При записи процедуры требуется соблюдать правила ее описания. Упрощенный синтаксис для процедур Sub является следующим:

Sub имя ([аргументы])
Инструкции
End Sub

Синтаксис описания функций очень похож на синтаксис описания процедуры Sub, однако, имеются некоторые отличия:

Function имя ([аргументы]) [As Тип]
Инструкции
имя = выражение
End Function

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

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

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

Рассмотрим пример объявления переменной.

С помощью оператора Dim объявляется переменная с именем МоеЛюбимоеЧисло и объявляется, что значение, которое она будет содержать, должно быть целым:

Dim МоеЛюбимоеЧисло As Integer

Константы представляют собой именованные значения, которые не меняются.

Оператор Constant создает строковую константу (текст) с именем НеизменныйТекст, представляющую собой набор символов Вечность:

Constant НеизменныйТекст = "Вечность"

Оператором Type объявляется пользовательский тип данных с именем Самоделкин, определяя его как структуру, включающую строковую переменную с именем Имя и переменную типа Date с именем ДеньРождения. В данном случае объявление займет несколько строк:

Type Самоделкин
Имя As String
ДеньРождения As Date
End Type

Объявление Private создает процедуру типа Sub с именем СкрытаяПроцедура, говоря о том, что эта процедура является локальной в смысле об­ласти видимости. Завершающий процедуру оператор End Sub считается частью объ­явления.

Private Sub СкрытаяПроцедура ()
инструкции
End Sub

Оператор присваивания = приписывают переменным или свойствам объектов конкретные значения. Такой оператор всегда состоят из трех частей: имени переменной, или свойства, знака равенства и выражения, задающего нужное значение.

Оператор = присваивает переменной МоеЛюбимоеЧисло значение суммы переменной ДругоеЧисло и числа 12.

МоеЛюбимоеЧисло = ДругоеЧисло + 12

В следующей строке кода, записывается, что свойству Color (Цвет) объекта AGraphicShape присваивается значение Blue (Синий) в предположении, что Blue является именованной константой:

AGraphicShape.Color = Blue

В следующеей строке, чтобы задать значение переменной КвадратныйКорень, для текущего значения переменной МоеЛюбимоеЧисло вызывается функция Sqr — встроенная функция VBA вычисления квадратного корня:

КвадратныйКорень = Sqr (МоеЛюбимоеЧисло)

В VBA выражением называется любой фрагмент программного кода, задающий некоторое числовое значение, строку текста или объект. Выражение может содержать любую комбинацию чисел или символов, констант, переменных, свойств объектов, встроенных функций и процедур типа Function, связанных между собой знаками операции (например, + или *). Несколько примеров выражений:

Выражение

 

Значение

3.14

3.14

Xn*5

10 (в предположении, что Xn = 2)

(12 - Sqr(x))/5

2 (в предположении, что х = 4)

«Розы красные,» &
« фиалки фиолетовые»

Розы красные, фиалки фиолетовые

Выполняемые операторы делают главную работу в программе и используются для выполнения следующих задач:

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

Пример. Оператор, вызывающий для выполнения метод Rotate объекта AGraphicShape:

AGraphicShape. Rotate(90)

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

Можно сделать и наоборот — разместить несколько операторов в одной строке программного кода. Например,

Dim A As Integer, В As Integer: A = 3: B = 5: A = A +B

Эта строка программного кода эквивалентна следующим четырем строкам:

Dim A As Integer, В As Integer
A = 3
B = 5
А = А + В

Самыми простыми диалоговыми окнами являются окна сообщений (message boxes) — это диалоговые окна, которые выдают пользователю сообщения и снабжаются одной или более кнопками для выбора. В VBA они создаются с использованием функции MsgBox.

В своей самой простой форме MsgBox используется как оператор с одним аргументом – сообщением, которое должно отображаться. Например, приведенный ниже макрос создаёт сообщение, показанное на рисунке.

Sub Program ()
MsgBox "Это - окно сообщений"
End Sub

MsgBox можно использовать для отображения числового значения.

Sub ShoeValue()
Amount = 10
MsgBox Amount
End Sub

Переменной Amount присваивается значение 10. На следующей строке для отображения значения Amount используется MsgBox. Вокруг Amount нет кавычек, поскольку это – значение переменной, которое нужно выдать на экран, а не слово "Amount".

Чтобы использовать вместе две отдельные строки в одном окне сообщения, следует использовать операцию конкатенации (&) — объединение.

Sub SayGoodNight()
Name = "Саша"
MsgBox "Пожелайте доброй ночи " & Name
End Sub

Переменной Name присваивается строка "Саша". В строке кода с MsgBox задаётся текстовая строка "Пожелайте доброй ночи ", за которой следует & Name, указывая MsgBox присоединить значение переменной Name к предыдущей текстовой строке.

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

MsgBox "Это - замечательное окно сообщений", _vbExclamation, "Персональное окно"

Существует четыре значка для окон сообщений. Каждый имеет определённое числовое значение, которое должно передаваться в качестве аргумента MsgBox. Однако вместо числа можно использовать константы со специальными именами, встроенные в VBA.

Таблица 1

Значки окна сообщений MsgBox

Отображение

Константа

Когда используется

Image4.gif (1052 bytes)

vbInformation

для сообщения, не требующего ответа

Image5.gif (1058 bytes)

vbQuestion

для того, чтобы задать вопрос

Image6.gif (1051 bytes)

vbExclamation

для выдачи важной информации

Image7.gif (1064 bytes)

vbCritical

для предупреждения

MsgBox является функцией и может возвращать значение, соответствующее той кнопке, которую нажимает пользователь. Одной из имеющихся опций окна сообщения является изменение кнопок, которое оно отображает. Вот окно сообщений, которое появляется, когда осуществляется выход из Excel, имея не сохраненные изменения в документе. Это окно имеет три кнопки.

После выбора соответствующей кнопки Excel получает информацию о том, какую кнопку выбрали.

Общий формат для функции MsgBox:

MsgBox(prompt [, buttons] [, title])

где prompt — единственный обязательный аргумент. Для окна сообщений следует задавать текстовую строку с информацией. если вы хотите изменить заголовок, появляющийся в верхней части окна, задайте для заголовка (title) текстовую строку. По умолчанию используется заголовок Microsoft Excel.

Таблица 2 Комбинации кнопок MsgBox

Отображение

Константа

Когда используется

Image9.gif (264 bytes)

vbOKOnly

Когда не требуется от пользователя принятия решения

Image9.gif (264 bytes)Image11.gif (281 bytes)

vbOKCancel

Когда окно сообщений объясняет возможное действие. Позволяет пользователю сделать выбор с помощью кнопки Отмена

Image9.gif (264 bytes)Image10.gif (271 bytes)

vbYesNo

Альтернатива константе vbOKCancel, когда кажется, что это сделает окно сообщений более понятным

Image9.gif (264 bytes)Image11.gif (281 bytes)Image10.gif (271 bytes)

vbYesNoCancel

Для таких ситуаций, как выход или закрытие файлов без сохранения (подобно ситуации, показанной на рисунке выше)

Image12.gif (272 bytes)Image13.gif (249 bytes)Image14.gif (275 bytes)

vbAbortRetryIgnore

При ответе на сообщения об ошибках диска или файла

Image13.gif (249 bytes)Image11.gif (281 bytes)

vbRetryCancel

При ответе на сообщения об ошибках диска или файла

Если не указывать, какие кнопки необходимо отображать в окне сообщений, то используется значение по умолчанию, соответствующее кнопке Оk.

Приведем несколько примеров решения задач на VBA.

Пример 1. Вычислить значение выражения a равного

, при x = 3, y = 2.5

Решение.

Sub выражение1()
Dim A, x, y
 
x = 3
y = 2.5
 
A = 2 * x - 3 * y
 
MsgBox (A)
 
End Sub

Пояснение решения.

В строке Dim A, x, y объявляются переменные A, x, y.

Пример 2. Вычислить значение выражения a равного

, при x = 3, y = 2.5

Замечание: значения x и y вводит пользователь.

Решение.

Sub выражение2()
Dim A, x, y As Double
 
x = InputBox("Введите x=")
y = InputBox("Введите y=")
 
A = 2 * x - 3 * y
 
MsgBox (A)
 
End Sub

Пояснение решения.

В строке Dim A, x, y As Double описываются переменные A, x, y как числа двойной точности.

При использовании строки

x = InputBox("Введите x=")

появиться окно

Пример 3. Вычислить значение выражения a равного

, при x = 3, y = 2.5

Замечание: значения x и y вводит пользователь, ответ выводится в виде «a = <значение>».

Решение.

Sub выражение3()
Dim A, x, y As Double
Dim ответ As String
 
x = InputBox("Введите x=")
y = InputBox("Введите y=")
 
A = 2 * x - 3 * y
ответ = "a=" + Str(A)
 
MsgBox (ответ)
 
End Sub

Пояснение решения.

В строке Dim ответ As String описывается переменная ответ как строковая.

Код Str(A) преобразует значение переменной A в строку.

Пример 4. Вычислить значения выражений при x = 3, y = 2.5

,

,

,

,

Решение.

Sub выражение4()
Dim A, b, c, d, a1, x, y As Double
 
x = InputBox("Введите x=")
y = InputBox("Введите y=")
 
A = 2 * x - 3 * y
b = (2 * x - 3 * y) / 2
c = (2 * x - 3 * y) / 2 * x
d = (2 * x - 3 * y) / (2 * x)
a1 = (2 * x - 3 * y) / (2 * x) + (5 - x) / (3 + y)
 
MsgBox ("a=" + Str(A))
MsgBox ("b=" + Str(b))
MsgBox ("c=" + Str(c))
MsgBox ("d=" + Str(d))
MsgBox ("a1=" + Str(a1))
 
End Sub

Пример 5. Выполнить пример 4, другим способом, с помощью вспомогательных переменных.

Решение.

Sub выражение5()
Dim A, b, c, d, a1, a2, b1, c1, c2, x, y As Double
 
x = InputBox("Введите x=")
y = InputBox("Введите y=")
 
A = 2 * x - 3 * y
b = (2 * x - 3 * y) / 2
c = (2 * x - 3 * y) / 2 * x
d = (2 * x - 3 * y) / (2 * x)
a1 = (2 * x - 3 * y) / (2 * x) + (5 - x) / (3 + y)
 
‘ новое решение
b1 = A / 2
c1 = b * x
c2 = b / (2 * x)
a2 = d + (5 - x) / (3 + y)
MsgBox ("a=" + Str(A))
MsgBox ("b=" + Str(b))
MsgBox ("c=" + Str(c))
MsgBox ("d=" + Str(d))
MsgBox ("a1=" + Str(a1))
MsgBox ("b1=" + Str(b1))
MsgBox ("c1=" + Str(c1))
MsgBox ("c2=" + Str(c2))
MsgBox ("a2=" + Str(a2))
 
End Sub

Пример 6. Вычислить площадь треугольника по трем известным сторонам. Например, a = 3, b = 4, c = 5.

Решение.

Sub Герон1()
Dim A, b, c, p, s As Double
A = 3
b = 4
c = 5
 
p = (A + b + c) / 2
s = Sqr(p * (p - A) * (p - b) * (p - c))
 
MsgBox ("s=" + Str(s))
 
End Sub

Пояснение решения.

Для решения задачи используется формула Герона.

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

 

Решение.

Sub Герон2()
Dim A, b, c, p, s As Double
 
A = Val(InputBox("Введите a="))
b = Val(InputBox("Введите b="))
c = Val(InputBox("Введите c="))
 
p = (A + b + c) / 2
s = Sqr(p * (p - A) * (p - b) * (p - c))
 
MsgBox ("s=" + Str(s))
 
End Sub

Пояснение решения.

Код Val(InputBox("Введите a=")) преобразует введенное значение через InputBox в число, так как InputBox возвращает строку. Если такого преобразования не сделать, то программа правильно вычислять s не будет.

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

Решение.

Sub гипотенуза()
Dim a, b, c, p, s As Double
 
a = Val(InputBox("Введите a="))
b = Val(InputBox("Введите b="))
 
c = Sqr(a ^ 2 + b ^ 2)
 
MsgBox ("c=" + Str(c))
 
End Sub