Чтение онлайн

ЖАНРЫ

VBA для чайников

Каммингс Стив

Шрифт:

уууу Год

q Квартал

rа Месяц

у День года

d День

w День недели

ww Неделя

h Час

n Минута

s Секунда

Например, в результате выполнения оператора

datБыло = DateAdd ("s", -90, Now)

переменная datБыло будет содержать значение, соответствующее времени, которое было 90 секунд тому назад относительно текущего времени. Если вам нужно отобразить на экране только ту часть этого значения, которая относится ко времени, используйте функцию Format с соответствующим времени аргументом форматирования (например, Format (datБыло, "Medium time ")), как было описано в разделе "Форматирование

данньк".

При этом функция DateAdd не возвращает недопустимых значений дат: если добавить один месяц к дате 31 августа, то результатом будет 30 сентября. Точно так же функция DateAdd не забудет, если нужно, изменить в результате и год.

С помощью функции DateAdd можно добавлять или вычитать некоторое число однотипных интервалов, но, например, для выяснения даты, которая была два года и три месяца назад, ничто не мешает применить эту функцию дважды.

В качестве альтернативы VBA предлагает для дат и времени две другие функции, которые позволяют смешивать интервалы,- Date Serial и TimeSerial. Каждая из этих функций имеет по три аргумента;

DateSerial (год, месяц, день]

TimeSerial (часы, минуты, секунды)

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

intГод = 1999

intМесяц = 12

intДень = 3 1

datНовоеТысячелетие = DateSerial (intГод, intМесяц, intДень + 1)

И, конечно же, любые из этих аргументов или даже все могут быть просто числами.

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

lngСколько = DateDiff ("m", #2/12/90#, #10/12/01#)

В результате выполнения этого оператора переменная lngСколько - переменная типа Long - будет содержать число месяцев, прошедших между двумя указанными датами. Для первого аргумента функция DateDiff требует код интервала времени, и в данном случае "m" сообщает функции о том, что нужно измерять в месяцах, а не в годах, неделях или каких-либо других единицах.

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

Function WhatAge(dateDateOfBirth As Date)

Dim intAge As Integer ' задайте Long, чтобы допустить возраст > 255 intAge = DateDiff ("yyyy", DateDateOfBirth, Date)

‘ проверяется, день рождения в этом году был или нет:

If DateSerial ( Year ( Date), Month(DateDateOfBirth), _

Day(DateDateOf Birth)) > Date Then

intAge = intAge – 1

End If

WhatAge = intAge

End Function

Из-за, так сказать, паразитического образа жизни на больших приложениях, VBA программы зачастую не требуют никаких элементов пользовательского интерфейса (диалоговых окон, меню и т.п.)- При запуске VBA-программа может выполняться на базе активного документа приложения, сообразуя свои действия с содержимым этого документа.

Ясно,

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

Две VBA-функции, MsgBox и Input Box, обеспечивают неплохие возможности базового уровня для передачи пользователю сообщений и получения от него ответов.

* Функция MsgBox отображает окно с сообщением, но не только - она позволяет определить, на какой из двух (или больше) кнопок щелкнул пользователь, чтобы закрыть окно.

* Функция Input Box отображает окно с сообщением и полем, в котором пользователь имеет возможность напечатать ответ.

Формально синтаксическая конструкция функции MsgBox выглядит так:

MsgBox(сообщение[, кнопки] [, заголовок] [, файл_справки, раздел])

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

В своей простейшей форме функция MsgBox действует как оператор. От вас требуется только напечатать его в отдельной строке и добавить сообщение, которое требуется отобразить. Например:

MsgBox "Это проверка работы MsgBox."

В результате выполнения такой строки VBA отобразит на экране окно с сообщением, подобное показанному на рис. 11.2 (пример А).

Рис. 11.2. Три простых окна сообщения

Текст сообщения можно заключить в скобки, но скобки необязательны, когда функция используется как оператор.

Сообщение может быть также переменной или выражением. Как обычно, VBA автоматически конвертирует за вас числовые значения и даты в отображаемые символы. Например, следующий фрагмент программного кода вполне работоспособен, а результат показан на рис. 11.2 (пример Б):

intWishCount = 3

datWhen = Format(Now, "Short date")

strInfol = "Ha "

strInfo2 = " осталось желаний: "

MsgBox strlInfol & datWhen & strInf o2 & intWishCount

Чтобы отобразить сообщение в несколько строк, добавьте в сообщение символы перехода на новую строку (их ASCII-код равен 13) с помощью функции Chr (пример В на рис. 11.2).

MsgBox "Это первая строка." & Chr(13) & "Это вторая строка.'

Можно разбить текст многострочного сообщения и на столбцы, используя символы табуляции (их ASCII-код равен 9).

Кроме сообщения, в окне сообщения может присутствовать одна из нескольких стандартных пиктограмм, а также несколько кнопок стандартного вида. Все это задается указанием одного числового значения для необязательного аргумента кнопки.

С пиктограммой ваше окно сообщения будет выглядеть немного "круче", чем простенькие окна с рис. 11.2. Показанное на рис. 11.3 окно сообщения содержит пиктограмму критической ситуации (эта пиктограмма обычно вызывает у пользователя некоторое волнение).

Рис. 113. Непростое окно сообщения

По умолчанию окно сообщения имеет только кнопку ОК, но можно в него добавить и кнопки с надписями Отмена, Да, Нет, Стоп, Повтор и Пропустить в различных комбинациях. На рис. 11.3 как раз показано окно с одной из таких комбинаций кнопок.

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