Событие workheet_change будет срабатывать только вручную. Я думаю, что лучше всего было бы реализовать это как событие изменения рабочего листа на вашем рабочем листе B, где я предполагаю, что изменения пользовательского ввода происходят.
Есть несколько альтернатив, которые я предлагаю, если это действительно вам не подходит, но я думаю, что это, вероятно, самый лучший вариант.
Изменить: другое предложение для следующих комментариев
Объект ThisWorkbook имеет событие SheetChange, которое будет если все листы в книге изменены. Если вы можете определить диапазоны, где данные будут введены на каждом из листов B, вы можете использовать эти диапазоны, как в вашем исходном коде.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not Sh Is Sheets("Worksheet A") Then
If Intersect(Sh.Range("B1:B5"), Target) Then
'Call MailAlert as required here
ElseIf Intersect(Sh.Range("B10:B20"), Target) Then
'Call MailAlert as required here
Else ' Etc...
'Call MailAlert as required here
End If
End If
End Sub
Сообщите мне, как это происходит.