В некоторых случаях необходимо создать процедуру обработки событий, которая принимает набор аргументов. Например, при обработке события активации листа в рабочей книге может потребоваться создать соответствующую процедуру. Если следовать методике из предыдущей статьи №80, VBE автоматически сгенерирует следующий код:
Эта процедура принимает один аргумент (Sh), представляющий активированный лист. Важно отметить, что тип переменной Sh – Object, а не просто Worksheet, потому что активированный лист может быть диаграммой.
Переданные в аргументе данные могут быть использованы в коде процедуры. В следующем примере процедура выполняется при активации рабочего листа, отображая тип и имя активированного листа с использованием функции TypeName и свойства Name объекта, переданного в аргументе:
На скриншоте ниже показано сообщение, которое появляется при активации листа "Лист2".
Некоторые процедуры обработки событий используют аргумент Cancel с типом данных Boolean. Например, объявление процедуры обработки события BeforePrint рабочей книги выглядит так:
Исходное значение аргумента Cancel, переданное процедуре, равно False. Однако код может изменить это значение на True, что приведет к отмене процесса печати. Приведенный ниже пример демонстрирует такую операцию:
Процедура Workbook_BeforePrint выполняется перед началом процесса печати, отображая сообщение, аналогичное тому, что видно на скриншоте ниже. Если пользователь выберет "Нет", то аргумент Cancel станет равным True, и ничего не будет напечатано.
Для отмены печати достаточно изменить значение аргумента Cancel.
Событие BeforePrint также возникает перед предварительным просмотром рабочей книги.
К великому сожалению, Excel не предоставляет возможности обработки событий BeforePrint на уровне листа (только на уровне книги), что не позволяет идентифицировать выводимые на печать листы рабочей книги. Обычно предполагается, что будет напечатан активный лист, но нет способа точно определить, выбрал ли пользователь печать всей рабочей книги.