Операторы
Прочие операторы
И еще несколько полезных операторов VBA, не попавших ни в одну из предыдущих групп.
Операции с одним объектом. Оператор With
Если в одном блоке программы предстоит выполнить несколько операций с одним объектом, то, чтобы не повторять многократно имя этого объекта, можно ввести оператор With.
Синтаксис:
With объект [операторы] End With
Здесь объект - имя объекта или переменной, определенного пользователем типа, а операторы - последовательность операторов, которые могут действовать с указанным объектом. В этих операторах имена свойств и методов указанного объекта можно начинать с точки, опуская имя самого объекта.
Допустим, пользовательский тип Person и переменная MyFriend определены так.
Type Person Name As String Age As Integer Height As Single End Type Dim MyFriend As Person
Тогда присвоение значений свойствам переменной MyFriend можно произвести с помощью оператора With:
With MyFriend Name = "Сергей" Age= 35 .Height = 178.5 End With
Подчеркнем, что в каждом блоке имя лишь одного объекта задается по умолчанию. При вложенности операторов With:
With объект1 операторы1 With объект2 операторы2 End With End With
в блоке операторы2 имя объекта1 нужно указывать полностью. Если же объект2 - элемент (подобъект) объекта1, то, использовав оператор With объект2, можно получить во внутреннем блоке сокращенный доступ к свойствам объекта " объект1. объект2 ".
Например, если к типу Person добавить данные о встрече:
Type Meeting Place As String Date As Date End Type Type Person Name As String Age As Integer Height As Single LastMeeting As Meeting End Type Dim NewAcquaintance As Person
то задавать данные о новом знакомом NewAcquaintance можно, используя вложенные операторы With.
With NewAcquaintance .Name = "Елена" .Age= 40 .Height = 168 With.LastMeeting .Place= "библиотека" 'этот оператор эквивалентен: 'NewAcquaintance. LastMeeting.Place="библиотека" .Date= #08/03/99# End With End With
Звуковой сигнал: оператор Beep
Подает звуковой сигнал через динамик компьютера.
Синтаксис:
Beep
Частота и сила звука зависят от оборудования и могут меняться от компьютера к компьютеру. Обычно звуковой сигнал используется как реакция на какие-либо ошибки или исключительные ситуации, возникающие при выполнении программы.
Установка системной даты: оператор Date
Синтаксис:
Date = дата
Пример:
Date = #April 29, 1999# ' Изменение системной даты.
Установка системного времени: оператор Time
Синтаксис оператора Time:
Time = время
Пример:
Time = #8:15:47 PM# ' Установка системного времени
Моделирование ввода с клавиатуры: оператор SendKeys
Посылает один или несколько кодов символов в текущее активное окно, как если бы соответствующие клавиши были нажаты.
Синтаксис:
SendKeys строка[, режим-ожидания]
Параметр строка - строковое выражение, задающее последовательность посылаемых символов. Необязательный параметр режим-ожидания - выражение с булевым значением. Если оно False (по умолчанию), управление возвращается в процедуру сразу же после посылки кодов; True - посланная последовательность кодов должна быть обработана, прежде чем управление возвратится в процедуру.
Большинство символов, набираемых на клавиатуре, входят в строку непосредственно. Например, чтобы послать последовательность из трех символов Y, E и S, возьмите в качестве строки " YES ". Символы: +, ^, %, ~, скобки и некоторые другие следует помещать в фигурные скобки. Например, чтобы послать +, в параметр строка нужно поместить {+}. Для посылки кодов клавиш, не отображаемых на экране, имеются специальные коды. Некоторые представлены в таблице, остальные можно найти с помощью подсказки:
Чтобы послать комбинацию клавиш, для Shift, Ctrl и Alt используются следующие коды (В примере используется документ DocTwo7:
Shift - + Ctrl ^ Alt %
Пример:
В качестве примера рассмотрим открытие документа, требующего пароль при его открытии:
Public Sub OpenDocWithPassword() 'Открытие документа с паролем SendKeys "+^" 'Переключение раскладки клавиатуры SendKeys "don" & "{'}" & "t know", False 'пароль "don't know" Documents.Open "e:\O2000\CD2000\Ch7\DocTwo7.doc" Documents("DocTwo7.doc").Activate End Sub
Обратите внимание на два момента:
- Прежде, чем послать сам пароль, происходит переключение клавиатуры на другую раскладку, для чего используется комбинация символов "Shift + Ctrl".
- Символы клавиатуры посылаются в буфер ввода еще до того, как они потребуются. Если бы оператор Open предшествовал оператору SendKeys, то окно ввода пароля появилось бы до выполнения этого оператора. В данном же случае при открытии документа пароль автоматически появится в окне ввода, так что останется только щелкнуть по кнопке OK.