ScreenUpdating - обновление экрана

Позволяет включать (присвоением свойству True) и отключать (присвоением False) обновление экрана. Имеет смысл отключить обновление экрана перед теми частями программы, которые интенсивно пользуются данными на листе. Благодаря тому, что системные ресурсы не будут тратиться на обновление экрана, программа будет работать быстрее. Этот метод весьма актуален, так как MS Excel часто используют для проведения ресурсоемких расчетов.

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

Например, ниже приведен код, который два раза повторяет процедуру 100-кратного вывода на экран 400 целых случайных чисел и выводит время, требующееся для выполнения этих действий с обновлением экрана и без него.

'Массив для значений времени

Dim WorkTime(2)

'Время начала теста

Dim StartTime

'Время окончания теста

Dim StopTime

'Включаем обновление

Application.ScreenUpdating = True

For i = 1 To 2

'Во втором проходе цикла

'выключим обновление

If i = 2 Then _

Application.ScreenUpdating = False

'Запишем текущее время

StartTime = Time

'Перейдем на лист для теста

Worksheets("Тест скорости").Activate

'Выведем 100 раз целые случайные

'числа в область 20х20

For y = 1 To 100

For p = 1 To 20

For j = 1 To 20

ActiveSheet.Cells(p, j) = _

Int(Rnd * 100)

Next j

Next p

Next y

'Запишем время окончания

StopTime = Time

'Для корректного представления

'в виде секунд

WorkTime(i) = _

(StopTime - StartTime) * 24 * 60 * 60

Next i

Application.ScreenUpdating = True

MsgBox "Время выполнения программы." & Chr(13) + _

"При включенном обновлении: " & _

WorkTime(1) & " сек." & Chr(13) & _

"При выключенном обновлении: " & _

WorkTime(2) & " сек."

Selection - ссылка на выделенный объект

Это очень важное свойство возвращает ссылку на выделенный объект. Чаще всего это - ячейка или группа ячеек. Например, это свойство удобно использовать при работе с выделенным диапазоном ячеек (или отдельной выделенной ячейкой). Ниже мы коснемся его подробнее.

WorksheetFunction - формулы Excel в коде VBA

Возвращает объект WorksheetFunction, методы которого представляют собой формулы Excel, которые можно использовать в коде VBA. Использование этого свойства позволяет облегчить выполнение сложных расчетов.

События Application

Объект Excel.Application поддерживает множество событий. Работа с ними аналогична работе с событиями Word.Application, которыми мы занимались в соответствующем разделе предыдущей главы.

Рассмотрим основные шаги, которые необходимо произвести, чтобы работать с событиями приложения, перечислим события и приведем пример.

Создайте новый модуль класса. Добавьте в него объявление объекта типа Excel.Application с событиями

Public WithEvents obj_ExApp As Excel.Application

После этого в списке объектов редактора кода модуля появится объект obj_ExApp, а в списке событий - соответствующие ему события. Выберите нужное вам событие - автоматически будет создан обработчик для него. В частности, Excel.Application поддерживает следующие события:

  • NewWorkbook - происходит при создании новой книги
  • SheetActivate - при активации любого листа
  • SheetBeforeDoubleClick - происходит при двойном щелчке по листу, то есть позволяет перехватить щелчок и выполнить собственную процедуру до того, как будет выполнено стандартное действие.
  • SheetBeforeRightClick - позволяет перехватить нажатие правой кнопки мыши по листу.
  • SheetCalculate - после пересчета листа или после изменения данных, которые отображаются на диаграмме.
  • SheetChange - при изменении содержимого ячеек на любом листе.
  • SheetFollowHyperlink - происходит при переходе по гиперссылке, которая может быть включена в лист Microsoft Excel.
  • SheetSelectionChange - при изменении выделения на листе
  • WindowActivate - при активации окна книги.
  • WindowDeactivate - при деактивации окна книги.
  • WindowResize - при изменении размера окна книги.
  • WorkbookActivate - при активации книги.
  • WorkbookBeforeClose - перед закрытием книги.
  • WorkbookBeforePrint - перед печатью книги.
  • WorkbookBeforeSave - перед сохранением книги.
  • WorkbookDeactivate - при деактивации книги.
  • WorkbookNewSheet - при добавлении нового листа в любую из открытых книг.
  • WorkbookOpen - при открытии книги.

После того, как создан обработчик, написан его код, работа еще не окончена. Следующий шаг - это связывание объекта obj_ExApp с реально работающим приложением. Ниже приведен полный код модуля с одним обработчиком события, а также - процедура, служащая для связывания объекта obj_ExApp с работающим приложением. Эта процедура может существовать в виде отдельного макроса или в виде кода обработчика нажатия на кнопку. Ее выполнение можно назначить событию открывающейся книги, которая содержит данный модуль класса и т.д.

Итак, вот код процедуры, который связывает объект созданного нами класса AppEvents с приложением:

Dim obj_ExcelAppEv As New AppEvents

Sub EventsInit()

Set obj_ExcelAppEv.obj_ExApp = Excel.Application

End Sub

А вот полный код модуля класса AppEvents с объявлением объектной переменной и обработчиком события.

Public WithEvents obj_ExApp As Excel.Application

Private Sub obj_ExApp_NewWorkbook(ByVal Wb As Workbook)

'Выполняется при создании новой книги

MsgBox "Вы создали новую книгу"

End Sub