Функции для организации взаимодействия с пользователем



Взаимодействие с пользователем в VBA, функции MsgBox() и InputBox()

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

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

MsgBox(Текст[,кнопки] [,заголовок окна] [, файл справки, метка в файле справки])

Возможностей у MsgBox() достаточно много:

· можно отображать разное кол-во кнопок (OK, Cancel, Abort, Retry, Ignore, Yes, No),

· можно показывать символы Critical, Warning, Question, Information,

· можно выбирать кнопку по умолчанию,

· можно делать окно модальным или обычным.

В зависимости от того, на какую пользователь кнопку нажал, такое значение возвращается приложению (всего 7 вариантов). Подробнее — в справке по VBA. Пример возврата значения от MsgBox():

Dim nVar As Integer

nVar = MsgBox ("Будем делать?", 65, "Демонстрационное окно сообщения")

Если значение nVar равно 1, то пользователь нажал OK, если 2, то Cancel.

Иногда (например, при пакетной обработке данных) хотелось бы, чтобы окно сообщения через некоторое время закрывалось само собой. Это можно сделать при помощи метода Popup() объекта Wscript.Shell. Для этого в проект через меню References нужно добавить ссылку на Windows Script Host Object Model (файл C:\WINNT\system32\wshom.ocx), а после этого использовать следующий код:

Dim oShell As New WshShell

oShell.Popup "Test", 5

В остальном функциональность получившего окна одинакова с MsgBox(). Код возврата, если пользователь не нажал ни на какую кнопку, равен -1.

Самый простой способ принять информацию от пользователя — воспользоваться функцией InputBox(). Все очень просто :

Dim Input

Input = InputBox("Введите Ваше имя: ")

MsgBox (" Вы ввели: " & Input )

Для InputBox() можно указать текст приглашения, заголовок окна, значение по умолчанию, местонахождение окна и файл справки. Не забывайте, что все вводимое пользователем InputBox() автоматически переводит в тип данных String — может потребоваться выполнить преобразование.

Можно привлечь внимание пользователем звуковым сигналом. Для этой цели используется оператор Beep:

Dim I

For I = 1 To 3

Beep

Next I

Функции — заменители синтаксических конструкций

Функции - заменители синтаксических конструкций VBA, функции Choose(), IIF(), Switch()

В VBA предусмотрено несколько функций, которые позволяют заменять синтаксические конструкции условного перехода, например, IF…THEN…ELSE или SELECT…CASE. Каких-то преимуществ применение этих функций не дает (может быть, код станет на несколько строчек короче), но профессиональные программисты очень любят их использовать, когда только это возможно.

Начинающим программистам рекомендуется обычные синтаксические конструкции, чтобы не путаться. Однако для чтения чужого кода необходимо знать и эти функции. Вот их перечень:

· Choose() — принимает число (номер значения) и несколько значений. Возвращает значение, порядковый номер которого соответствует передаваемому числу. Например, Choose (2, "Первый", "Второй", "Третий") вернет "Второй".

· IIF() — расшифровывается как Immediate IF, то есть "Немедленный IF. Представляет из себя упрощенный вариант IF, когда проверяется условие и возвращается одно из двух значений. Пример:

IIf (n > 10, "Больше десяти", "Меньше или равно десяти")

· Switch() — принимает неограниченное количество пар типа выражение/значение, проверяет каждое выражения на истинность и возвращает значение для первого выражения, которое оказалось истинным. Например:

Function Language (CityName As String)

Language = Switch(CityName = "Москва", "русский", CityName _

= "Париж", "французский", CityName = "Берлин", "немецкий")

End Function


Дата добавления: 2018-10-27; просмотров: 272; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!