- •Объектная модель
- •Полная и неявная ссылка на объект
- •Ссылка на активную рабочую книгу, лист, ячейку, диаграмму и принтер
- •Загрузка инсталлированной надстройки
- •Управление уровнем безопасности
- •Семейство встроенных диалоговых окон
- •Объект FileDialog
- •Методы объекта Application
- •Установка выполнения специфицированной процедуры при нажатии заданной комбинации клавиш
- •Переопределение горячих клавиш приложения
- •Проверка правописания отдельного слова
- •Симулирование ячеек рабочего листа
- •Электронные часы в ячейке рабочего листа
- •Получение данных из закрытой рабочей книги
- •События объекта Application
- •IgnoreReadOnlyRecommended — необязательный параметр, указывающий надо ли отображать предупреждение о том, что книга была сохранена в режиме "только для чтения";
- •Установка и снятие защиты книги
- •Методы объекта Worksheet
- •Объект Protection
- •События объекта Worksheet
- •Добавление к графическому объекту обработчика события Click
- •Примечание
- •Свойства объекта Range
- •Управление стилем границы диапазона и объекта Border
- •Функции rgb и qbColor
- •Доступ к отдельным ячейкам диапазона
- •Выбор элементов на рабочем листе или в книге
- •Объект Characters
- •Объект Comment
- •Определение текущего диапазона
- •Объект Font
- •Объект Interior
- •Установка числового формата
- •Переопределение размеров диапазона
- •Методы объекта Range
- •Табуляция функции
- •Заполнение диапазона по одному значению
- •Специальная вставка
- •Вставка диапазона с транспонированием
- •Бегущая картинка
- •Поиск значения в диапазоне
- •Повторный поиск и поиск всех значений
- •Поиск по формату
- •Замена значений
- •Ввод в диапазон неповторяющихся значений
- •Озвучивание текста
- •Построение графа
- •Пользовательские функции
- •Математические функции
- •Надстройки
- •Где хранятся макросы?
Симулирование ячеек рабочего листа
Метод Evaluate позволяет симулировать работу с ячейками или диапазонами рабочего листа без реального воплощения этих действий на рабочем листе. Например, в следующем коде симулируется ввод в ячейку А1 значения 25, ввод в ячейку А2 формулы =a1^2 и считывание возвращаемого этой формулой значения.
Evaluate("A1").Value = 25
Evaluate("A2").Formula = "=А1^2"
MsgBox Evaluate("A2").Value
Тут же задачу можно решить в следующем коде, но здесь уже производится симулирование не операции ввода и вывода, а самих ячеек.
Dim firstCell As Range
Dim secondCell As Range
Set firstCell = Evaluate("A1")
Set secondCell = Evaluate("A2")
firstCell.Value = 25
secondCell.Formula = "=А1^2"
MsgBox secondCell.Value
Применение квадратных скобок при симулировании
операций на рабочем листе
Вместо метода Evaluate со строкой в качестве значения его параметра, можно использовать эту же строку, но заключенную в квадратные скобки. Запись оператора будет короче, а результат — тот же.
[al].Value = 25
[а2].Formula = "=А1^2"
MsgBox [a2].Value
или
Dim s As Double
s = [(l+3)/2+sin(2)]
MsgBox s
Назначение выполнения процедуры на определенное время
Метод onTime объекта Application назначает выполнение указанной процедуры на определенное время.
OnTime(EarliestTime, Procedure, LatestTime, Schedule) Здесь:
EarliestTime — обязательный параметр типа Variant, задающий момент запуска процедуры;
Procedure — обязательный параметр типа String, задающий имя процедуры;
Latestrime — необязательный параметр типа Variant. Если на момент запуска процедуры MS Excel не может ее запустить в силу того, что он выполняет другое действие, то Latestrime определяет последнее время ее запуска. Если этот параметр опущен, то MS Excel будет ждать до тех пор, пока не сможет выполнить данную процедуру;
Schedule — необязательный параметр типа Variant. Если его значение равно True, то указанная процедура установлена на выполнение в специфицированное время. Если же значение равно False, то задание снято с исполнения.
Электронные часы в ячейке рабочего листа
Метод onTime позволяет создать электронные часы (листинг 5.14). Для этого достаточно рекурсивно вызывать процедуру, которая считывает текущее время и выводит в ячейку рабочего листа, затем найденное время увеличивается на секунду, а уже для вычисленного нового времени устанавливается рекурсивный вызов процедуры самой себя при помощи метода OnTime.
Листинг 5.14. Электронные часы
Sub DemoClockO
DemoOnTime
End Sub
Sub DemoOnTime()
Dim newHour, newMinute, newSecond, newTime
Cells (1, 1).Value = Now
newHour = Hour(Now)
newMinute = Minute(Now)
newSecond = Second(Now)+ 1
newTime = TimeSerial(newHour, newMinute, newSecond)
Application.OnTime EarliestTime:=newTime, Procedure:="DemoOnTime"
End Sub
Электронный будильник
Метод OnTime обеспечивает простую реализацию будильника. Для этого в качестве значения первого его параметра достаточно указать момент времени, когда будильник должен прозвонить, а в качестве значения второго параметра — ссылку на процедуру, которая и реализует "звон". Например, приводимый ниже код обеспечивает отображение сообщения "Слишком поздно!!!" в 50 минут после полуночи.
Листинг 5.15. Электронный будильник
Sub DemoAlarmO
Application.OnTime EarliestTime:=TimeValue("00:50:00") , Procedure:="AlarmClock"
End Sub
Sub AlarmClock()
MsgBox "Слишком поздно!!!"
End Sub
Отмена задания у часов
Если значение параметра Schedule метода onTime установлено равным False, то установленное при помощи параметров EarliestTime и Procedure задание снимается с выполнения. Например, код листинга 5.16 для модуля рабочего листа отменяет выполнение процедуры, играющей роль будильника из предыдущего раздела, при двойном щелчке на ячейке рабочего листа.
Листинг 5.16. Отмена задания у часов. Модуль рабочего листа
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
Cancel As Boolean)
On Error Resume Next
Application.OnTime EarliestTime:=TimeValue("00:50:00"), _
Procedure:="AlarmClock", Schedule:=False
End Sub
Закрытие приложения
Метод Quit объекта Application закрывает приложение. Например, код листинга 5.17 из модуля рабочего листа производит закрытие приложения при двойном щелчке на ячейке рабочего листа без предупреждения пользователя о необходимости сохранить обновленную версию рабочей книги.
Листинг 5.17. Закрытие книги без отображения предупреждающего сообщения. Модуль рабочего листа
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
Cancel As Boolean)
Application.DisplayAlerts = False
Application.Quit
End Sub
Сохранение изменений во всех рабочих книгах
Метод Save объекта Application сохраняет на диск изменения указанной рабочей книги. Код листинга 5.18 из модуля рабочего листа, обрабатывающий событие BeforeRightClick объекта Worksheet, при щелчке правой кнопкой мыши на ячейке А1 обеспечивает сохранение всех рабочих книг, открытых в данном приложении с последующим его закрытием.
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Target Is Range("Al") Then
Dim wb As Workbook
For Each wb In Application.Workbooks
wb.Save
Next
Application.Quit
End If
End Sub
Приостановка работы приложения до указанного времени
Метод Wait объекта Application приостанавливает работу приложения без остановки работы других программ до указанного момента времени. Возвращает значение True, если специфицированный момент времени наступил.
Wait (Time)
Здесь параметр rime определяет время, в которое предполагается возобновить работу приложения.
В следующем примере устанавливается возобновление работы приложения на 17 часов:
Application.Wait "17:00:00"
В данном примере приложение прерывает выполнение до указанного момента времени и начинает работу с отображением сообщения:
Dim delay As Date
delay = #11:11:00 PM#
If Application.Wait(delay) Then
MsgBox "Пора взятся за дело"
End If
В последнем коде выполнение приложения задерживается на 10 секунд:
Dim delay As Date
delay = Now + TimeValue("00:00:10")
Application.Wait delay
