80
зон) c характеристиками выделенной ячейки (например, адресом:
Target.Address). Вообще говоря, все действия, связанные с обработ-
кой этой ячейки, можно поместить внутрь данной процедуры. Но
обычно общие действия для ряда объектов (в частности для различ-
ных листов) выполняют в модулях. Следуя этому принципу можно
всю обработку ячейки из макроса примера 6 оформить как процеду-
ру, в которую из процедуры обработки события передаётся адрес
Addr только что выделенной ячейки. В таком случае процедуру в мо-
дуле (названную, например, ModuleSub) следует начать оператором
Sub ModuleSub(ByVal Addr As String) 'Addr – текстовая строка под адрес
Для её вызова и передачи в неё фактического адреса только что выде-
ленной ячейки в процедуре обработки события помещают
оператор вызова процедуры Call :
Call ModuleSub(Target.Address) ' Вызов процедуры с передачей в неё адреса
Теперь можно сформулировать
сценарий универсального решения примера 6
:
1.
По сочетанию клавиш Ctrl+Shift+R макросом запускается процесс
анализа общих сумм и количества звонков абонентов.
2.
Выделяется ячейка. Если она пуста, то следует переход к пункту 4,
иначе (ячейка содержит фамилию) выполняется пункт 3.
3.
Процедура обработки события «Изменение выделения» передаёт
адрес только что выделенной ячейки в процедуру ModuleSub, ко-
торая вычисляет и выводит требуемые величины. Затем следует
переход к пункту 2, где ожидается выделение очередной ячейки.
4.
После выделения пустой ячейки процесс анализа прекращается.
В макросе
RunMac для запуска анализа можно использовать общую
(public) для всех процедур переменную, например, переменную с
именем OnOff. Сначала она имеет значение Empty, а потом OnOff=1,
когда процесс анализа запускается («включается») макросом:
Public OnOff ′ объявление общей переменной
Sub RunMac( )
OnOff = 1: Cells(2, 1) ="Вкл"
' Символы Вкл - в ячейку $A$2
End Sub