Устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа integer, указывающее, какая кнопка была нажата.
Синтаксис:
MsgBox (prompt [, buttons] [, title] )
Аргументы:
¾ prompt — Обязательный параметр. Строковое выражение, отображаемое как сообщение в диалоговом окне
¾ buttons — Необязательный параметр. Числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку и модальность окна сообщения. Значение по умолчанию этого аргумента равняется 0. Значения констант, определяющих число и тип кнопок используемого значка, приведены в табл.11
¾ title — Необязательный параметр. Строковое выражение, отображаемое в строке , заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка помещается имя приложения
Таблица 11 – Значение констант, определяющее тип и число кнопок, тип значка
Имя Константы | Числовое значение | Отображаются кнопки |
VbOkOnly | ||
VbOkCancel | ||
VbAbortRetryIgnore | ||
VbYesNoCancel | ||
VbYesNo | ||
VbRetryCancel | ||
VbCritical | ||
VbQuestion | ||
VbExclamation | ||
VbInformation | ||
VbDefaultButtob1 | Первая кнопка по умолчанию | |
VbDefaultButtob2 | Вторая кнопка по умолчанию | |
VbDefaultButtob3 | Третья кнопка по умолчанию | |
VbDefaultButtob4 | Четвертая кнопка по умолчанию | |
VbSystemModal | Режим модальности: все программы приостанавливаются до тех пор, пока пользователь не ответит на сообщение |
Значения 0-5 параметра кнопки могут быть просуммированы со значениями 16-64 и 256-4096. В этом случае первые значения определяют состав кнопок диалогового окна, вторы – вид отображаемого в окне значка, а третьи – выбор кнопки по умолчанию.
Например, если в качестве значения параметра указать выражение 3+64+512, то в диалоговом окне будут отображены кнопки Да, Нет, Отмена, значок информирующего значения и по умолчанию будет выбрана кнопка Отмена.
Public Sub qq()
MsgBox "Нажмите любую кнопку", _
vbYesNoCancel + vbInformation + vbDefaultButton3, _
"Контрольный пример"
MsgBox "Нажмите любую кнопку", _
3 + 64 + 512, _
"Контрольный пример"
MsgBox "Нажмите любую кнопку", _
579, _
"Контрольный пример"
End Sub
При написании программ с откликом, когда нужно знать, какая кнопка диалогового окна была нажата (таблица 12), вместо возвращаемых значений удобнее использовать следующие константы VBA, которые делают код программы более читаемым и, к тому же, их легко запомнить.
Таблица 12
Константа | Значение | Нажатая кнопка |
vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo | ОК Отмена (Cancel) Прервать (Abort) Повторить (Retry) Пропустить (Ignore) Да (Yes) Нет (No) |
Пример.
Public Sub TestMsgBox1()
x = 2
n = MsgBox("Значение переменной Х=" & x & Chr(10) _
& "Продолжитьвычисления ?", vbYesNo, "Пример окна MsgBox")
If n = 6 Then
MsgBox "Нажата кнопка Да"
ElseIf n = 7 Then
MsgBox "Нажата кнопка Нет"
End If
End Sub
Пользователь может нажать одну из кнопок – Да или Нет. Если будет нажата кнопка Да, переменной N будет присвоено значение 6 , если будет нажата кнопка Нет – 7. Проанализировав в дальнейшем это значение, можно выбрать одну из ветвей выполнения программы.
Часто процедура MsgBox используется в «минимальном» варианте - только для вывода сообщения, с одной кнопкой – OK. В этом случае аргументы не берутся в скобки.
Например:
MsgBox “Значение переменной Х=” & X
Пример окна сообщений
ПРИМЕР:
1. Пример использования окон сообщений. В результате действия приведенной ниже процедуры Тестокон появится диалоговое окно пример окна ввода с полем ввода
Следуя приглашению в этом диалоговом окне, введем в поле ввода имя, например Андрей. Нажмем кнопку ОК.
На экране отобразится диалоговое окно пример окна сообщения с текстом приветствия
Если пользователь не введет имя в поле ввода диалогового окна Пример окна ввода или нажмет кнопку Отмена, то компьютер выразит свое неудовлетворение действиями пользователя отображением диалогового окна
Public Sub ТестОкон()
Dim ИмяКлиента As String
'
' Ввод имени пользователя
'
ИмяКлиента = InputBox("Введите ваше имя", "Пример окна ввода")
' Реакция программы на ввод имени пользователя
If ИмяКлиента <> "" Then
MsgBox "Привет, " & ИмяКлиента, vbInformation, _
"Пример окна сообщения"
Else
MsgBox "Невежа, ты забыл ввести свое имя ", _
vbExclamation, "Еще один пример окна сообщения"
End If
End Sub
Условные операторы
Для изменения порядка выполнения программного кода используются условные операторы
Условный оператор позволяет выбирать и выполнять действия в зависимости от истинности некоторого условия.
Имеется два варианта синтаксиса:
1) Строчная форма записи условного оператора:
IF <условное выражение>Then <операторы1> [Else <операторы2>]
Работа:
Если <условное выражение>принимает значение True, то выполняются <операторы1>после Then и управление передается оператору, следующему за условным оператором. Если <условное выражение>=False, то выполняются <операторы2> после Else и управление передается оператору, следующему за условным оператором. Ветвь Else является необязательной
2) Блочная форма записи оператора IF (оператор расположен на нескольких строках ):
IF < условное выражение 1>Then
<операторы 1>
[ElseIf < условное выражение–n>Then
[<операторы-n>]…
[Else
[<ИначеОператоры>]
End If
Работа:
Если <условное выражение1>принимает значение True, то выполняются <операторы 1> после Then, и управление передается оператору, следующему за условным оператором. Если <условное выражение1>=False, то при наличии конструкции [ElseIf < условное выражение–n>проверяется значение < условное выражение–n>. Если оно имеет значениеTrue, то выполняются[<операторы-n>]…и управление передается оператору, следующему за условным, в противном случае выполняются операторы [<ИначеОператоры>]после Else. Ветвь Else является необязательной.
На блок-схеме условные операторы отображаются следующим образом:
Пример 1
Вычислить, является ли введенное число четным
Public Sub Четное_число()
Dim s As Integer
s = Worksheets(1).Range("a1")
's = Worksheets("Лист1").Range("a1")
's = Worksheets(1).Cells(1, 1)
's = CInt(InputBox("Введите любое целое число"))
If s Mod 2 = 0 Then
Worksheets(1).Range("a2") = "Введенное число " & s & " является четным"
'MsgBox "Введенное число " & s & " является четным"
Else
Worksheets(1).Range("a2") = "Введенное число " & s & " является нечетным"
'MsgBox "Введенное число " & s & " является нечетным"
End If
End Sub
Пример 2
Вычислить
Public Sub aa()
Dim a As Double, f As Double
Dim i As Integer
a = Worksheets(2).Range("b1")
i = Worksheets(2).Range("b2")
If i Mod 2 = 0 And a > 0 Then
f = i * Sqr(a)
ElseIf i Mod 2 <> 0 And a < 0 Then
f = 0.5 * i * Sqr(Abs(a))
Else
f = Sqr(Abs(i * a))
End If
Worksheets(2).Range("a3") = "Результат"
Worksheets(2).Range("a4") = "f="
Worksheets(2).Range("b4") = f
End Sub
Пример 3 Вложенные операторы If
Public Sub Возраст1()
intВозраст = InputBox("Укажите возраст")
If intВозраст > 7 Then
If intВозраст <= 17 Then
MsgBox ("Школьник")
Else
MsgBox "Взрослый"
End If
Else
MsgBox "Дошкольник"
End If
End Sub
Пример 4 Эквивалентом вложенных операторов операторов If является оператор If …Then … ElseIf, в котором используется ключевое слово ElseIf
Public Sub Возраст2()
intВозраст = InputBox("Укажите возраст")
If intВозраст < 7 Then
MsgBox "Дошкольник"
ElseIf intВозраст <= 17 Then
MsgBox ("Школьник")
ElseIf intВозраст <= 23 Then
MsgBox ("Студент")
ElseIf intВозраст <= 55 Then
MsgBox ("Специалист")
Else
MsgBox "Пенсионер"
End If
End Sub
Что получим, если ничего не введем ?
11.3 Оператор безусловного перехода GoTo
Оператор безусловного перехода GoToвсегда изменяет порядок выполнения операторов в программе – при этом VBA не проверяет никаких условий, а просто переходит к выполнению программы с того места, которое будет указано в этом операторе.
Синтаксис оператора:
GoTo Labl
Здесь Labl – метка, определяющая оператор (или группу операторов), с которого будет продолжено выполнение программы. Метка – это любой допустимый идентификатор VBA, за которым обязательно должно следовать двоеточие.
Public Sub Опер_GoTo()
Пароль = InputBox("Введите Ваш пароль")
If Пароль <> "ABC" Then GoTo Неверный_пароль
MsgBox ("Добро пожаловать, ABC!")
'Другие операторы
Exit Sub
Неверный_пароль:
MsgBox "Вы не можете работать на этой машине"
End Sub
В этой процедуре оператор GoToиспользуется для перехода в особую ветвь программы, предназначенную для обработки ситуации, когда пользователь вводит неверный пароль. Если же пароль будет введен верно (“ABC”), то после вывода приветствия программа представит пользователю доступ к машине для продолжения работы.
Оператор GoToне пользуется большой популярностью у программистов, поскольку его использование противоречит нормам структурного программирования и часто приводит к появлению ошибок в логике программы. Поэтому оператор GoToследует применять только в том случае, когда без него никак нельзя обойтись. Обычно в VBA оператор GoToиспользуется только при обработке ошибок.
11.4 Условный оператор Select Case
Кроме рассмотренных ранее условных операторов If в языке VBA имеется еще один условный оператор Select Case, который используется в тех случаях, когда необходимо проверять одно и то же значение, сравнивая его с различными выражениями.