Запрос данных и выдача сообщений в стандартных диалоговых окнах Visual Basic

Функции для работы с массивами

Функции для форматирования данных

Для форматирования данных в вашем распоряжении функция Format()и целый набор функций, которые начинаются с префикса Format... (FormatNumber(), FormatCurrency(), FormatDateTime() и т. п.) Синтаксис функции Format() выглядит так:

Format(выражение, "формат")

Эта функция принимает выражение и форматирует его в соответствии с параметром формат.

Несколько примеров применения Format() (посмотрите сами, что получится):

Format(15/20, "Percent")

Format(Date, "Long Date")

Format(1, "On/Off")

Format(334.9, "###0.00")

Format("Просто текст", ">" )

Для остальных функций Format... то, что они делают, понятно из названий.

Особая ситуация — когда нужно, чтобы дата отображалась на компьютерах пользователей единообразно вне зависимости от региональных настроек. В качестве решения можно использовать функцию DatePart(), при помощи ее перевести дату "по частям" в текстовый формат и склеить нужным образом.

Как уже говорилось, при программной работе с приложениями Microsoft Office массивы используются редко. Вместо них применяются коллекции. Однако в VBA предусмотрены возможности и для работы с массивами.

q Array() — позволяет автоматически создать массив нужного размера и типа и сразу загрузить в него переданные значения:

Dim myArray As Variant

myArray = Array(10,20,30)

MsgBox A(2)

q Filter() — позволяет на основе одного массива получить другой, отфильтровав в исходном массиве нужные нам элементы.

q LBound(), UBound() — возвращают соответственно информацию о нижней границе массива (номер первого имеющегося в массиве значения) и о верхней границе (номер последнего имеющегося значения).

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

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

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

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

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

q можно отображать разное количество кнопок (OK, Cancel, Abort, Retry, Ignore, Yes, No);

q можно показывать символы Critical (красный круг с крестом), Exclamation (восклицательный знак в желтом треугольнике), Question (вопросительный знак), Information (буква "I");

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

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

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

Dim nVar As Integer

nVar = MsgBox ("Будем делать?", vbInformation + vbOKCancel, _

"Демонстрационное окно сообщения")

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

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

Dim oShell As New WshShell

oShell.Popup "Test", 5

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

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

Dim InputName

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

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

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

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

Dim i

For i = 1 To 3

Beep

Next i

Если нужно обеспечить более сложное взаимодействие с пользователем, можно подумать о применении формы, возможностей самого документа Office или помощника (Office Assistant). Очень мощные возможности обеспечивает и применение объектной модели Internet Explorer.