Worksheet_Change в VBA Excel
trifnvoleg
Интересующийся
1/1/2010, 10:51:22 PM
Здравствуйте, Уважаемые!
Всех от души с Новым годом!
У меня такой вопрос (проблема) возник по ходу разработки макроса под Excel.
Дело в следующем... На одном из листов моей рабочей книги имеется ячейка, в которую транслируется значение из ячейки с другого листа. Когда значение в этой ячейке изменяется, программа должна проанализировать изменение и выполнить определённые действия.
Разумеется, я решил воспользоваться событием Worksheet_Change в Коде изменяемого листа. Но не тут-то было! Оказалось, что если этот лист не активен, то макрос никак не реагирует на это событие. Реакцию вызывает только НЕПОСРЕДСТВЕННОЕ изменение значения ячейки в АКТИВНОМ листе!
Подскажите, пожалуйста, можно как-нибудь обойти эту проблему? Мне бы хотелось вообще не заглядывать на тот лист, и чтобы там всё происходило автоматически, без моего участия...
Если я путано объяснил суть своей проблемы, то попробую сейчас показать её на простом примере. Если вы мне подскажете, как надо организовать работу программы в этом примере, то дальше я уже самостоятельно соображу...
Итак, имеются два листа: Лист1 и Лист2.
На Лист2 в ячейку А1 вписана формула "=Лист1!A1". Таким образом, когда мы изменяем значение в ячейке А1 первого листа, автоматически изменяется и значение в ячейке А1 второго листа.
Теперь в Коде второго листа вписываем вот такую процедуру:
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox (Target)
End Sub
После этого при НЕПОСРЕДСТВЕННОМ изменении любой ячейки на Лист2, выскакивает сообщение с тем значением, которое мы вводим.
Но когда мы изменяем ячейку А1 на первом листе, то сообщение не выскакивает (реакции на событие нет!), хотя значение в ячейке А1 второго листа тоже изменилось...
Как заставить программу реагировать на изменение ячеек на НЕАКТИВНОМ в данный момент листе?
Всех от души с Новым годом!
У меня такой вопрос (проблема) возник по ходу разработки макроса под Excel.
Дело в следующем... На одном из листов моей рабочей книги имеется ячейка, в которую транслируется значение из ячейки с другого листа. Когда значение в этой ячейке изменяется, программа должна проанализировать изменение и выполнить определённые действия.
Разумеется, я решил воспользоваться событием Worksheet_Change в Коде изменяемого листа. Но не тут-то было! Оказалось, что если этот лист не активен, то макрос никак не реагирует на это событие. Реакцию вызывает только НЕПОСРЕДСТВЕННОЕ изменение значения ячейки в АКТИВНОМ листе!
Подскажите, пожалуйста, можно как-нибудь обойти эту проблему? Мне бы хотелось вообще не заглядывать на тот лист, и чтобы там всё происходило автоматически, без моего участия...
Если я путано объяснил суть своей проблемы, то попробую сейчас показать её на простом примере. Если вы мне подскажете, как надо организовать работу программы в этом примере, то дальше я уже самостоятельно соображу...
Итак, имеются два листа: Лист1 и Лист2.
На Лист2 в ячейку А1 вписана формула "=Лист1!A1". Таким образом, когда мы изменяем значение в ячейке А1 первого листа, автоматически изменяется и значение в ячейке А1 второго листа.
Теперь в Коде второго листа вписываем вот такую процедуру:
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox (Target)
End Sub
После этого при НЕПОСРЕДСТВЕННОМ изменении любой ячейки на Лист2, выскакивает сообщение с тем значением, которое мы вводим.
Но когда мы изменяем ячейку А1 на первом листе, то сообщение не выскакивает (реакции на событие нет!), хотя значение в ячейке А1 второго листа тоже изменилось...
Как заставить программу реагировать на изменение ячеек на НЕАКТИВНОМ в данный момент листе?
trifnvoleg
Интересующийся
1/8/2010, 1:49:36 AM
Кому интересно, я ответ нашёл на свой вопрос!!! На одном форуме мне подсказали...
В данном случае событие Worksheet_Change для второго листа и не генерируется...
На втором листе используйте событие
Private Sub Worksheet_Calculate()
' Срабатывает пересчёт формул на листе
End Sub
В данном случае событие Worksheet_Change для второго листа и не генерируется...
На втором листе используйте событие
Private Sub Worksheet_Calculate()
' Срабатывает пересчёт формул на листе
End Sub