81
В процедуре
(рабочего листа) обработки события «Изменение выде-
ления» вызов ModuleSub выполняется лишь тогда, когда OnOff =1:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If OnOff = 1 Then Call ModuleSub(Target.Address) ' Вызов с передачей адреса
End Sub
При завершении анализа, когда при OnOff =1 адрес указывает на
пустую ячейку, необходимо в процедуре ModuleSub назначить
OnOff = Empty, «выключить» анализ и выйти из процедуры по
оператору выхода Exit Sub. С этим добавлением размещаемая в том
же модуле, что и макрос процедура ModuleSub имеет следующий вид:
Sub ModuleSub(ByVal Addr As String) ′Addr – текстовая строка под адрес
If Range(Addr) = Empty Then
OnOff = Empty: Cells(2, 1) = "Выкл":
Exit Sub ' Выкл - в ячейку $A$2
End If
Fam$ = Range(Addr) ' Копировать фамилию в Fam$
i = 3: S = 0: Kol = 0
' Текст из примера 6:
Do While Cells(i, 2) <> Empty
If Cells(i, 2) = Fam$ Then
S = S + Cells(i, 3)
Kol = Kol + 1
End If
i = i + 1
Loop
Cells(1, 2) = S: Cells(1, 4) = Kol ′ Запись результатов в B1, D1 и F1:
If (Kol <> 0) Then Cells(1, 6) = S / Kol
' Kol=0 при некорректном указании
Cells(1, 8) = Fam$
' Фамилию - в ячейку $H$1
End Sub
Вывод результатов в форму можно обеспечить, если использовать
объект UserForm (экранная форма или просто форма), который со-
ставляет часть пользовательского интерфейса приложений Windows.
Объекту UserForm (как экземпляру класса UserForm) присущи его
свойства и методы. Каждый объект UserForm включает в себя также
модуль класса, в который можно добавлять собственные методы и