столкнулся с задачей: нужен макрос, который запускал бы макрос PIRR_Search при любых изменениях в книге, которые бы привели к тому, что значение в ячейке PNPV1 (это ячейка с присвоенным именем) стало бы отличным от нуля.
пробовал вот такой код:
[vba]
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Range("PNPV1").Value <> "" And Math.Abs(Range("PNPV1").Value) > 0.01 Then Module1.PIRR_Search End If End Sub
[/vba]
код почему-то не срабатывает. предложите, пожалуйста, рабочий вариант или объясните, почему не работает мой (файл во вложении).
спасибо!
здравствуйте!
столкнулся с задачей: нужен макрос, который запускал бы макрос PIRR_Search при любых изменениях в книге, которые бы привели к тому, что значение в ячейке PNPV1 (это ячейка с присвоенным именем) стало бы отличным от нуля.
пробовал вот такой код:
[vba]
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Range("PNPV1").Value <> "" And Math.Abs(Range("PNPV1").Value) > 0.01 Then Module1.PIRR_Search End If End Sub
[/vba]
код почему-то не срабатывает. предложите, пожалуйста, рабочий вариант или объясните, почему не работает мой (файл во вложении).
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Application.Calculate If Range("PNPV1").Value <> "" And Math.Abs(Range("PNPV1").Value) > 0.01 Then Module1.PIRR_Search End If End Sub
[/vba] Представьте - Вы что-то где-то поменяли. Затем Вы СРАЗУ пытаетесь проверить свою ячейку. Конечно же, там ничего не изменилось - до нее просто не дошло еще по цепочке формул, Вы раньше к ней сунулись проверять. Поэтому сначала запускаем пересчет формул, а потом идем проверять ячейку.
А так? [vba]
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Application.Calculate If Range("PNPV1").Value <> "" And Math.Abs(Range("PNPV1").Value) > 0.01 Then Module1.PIRR_Search End If End Sub
[/vba] Представьте - Вы что-то где-то поменяли. Затем Вы СРАЗУ пытаетесь проверить свою ячейку. Конечно же, там ничего не изменилось - до нее просто не дошло еще по цепочке формул, Вы раньше к ней сунулись проверять. Поэтому сначала запускаем пересчет формул, а потом идем проверять ячейку._Boroda_
А у меня реагирует. Вы в моем файле смотрите или в своем? Смотрите в моем. Поставьте в Е59 единицу. Кстати, Вы макросы разрешили при открытии файла?
О! пока писал, Вы уже поправили свой пост выше. Тогда добавка
У Вас макрос PIRR_Search находится именно в модуле с названием "Module1"? Макрос Private Sub Workbook_SheetChange находится именно в модуле КНИГИ?
А у меня реагирует. Вы в моем файле смотрите или в своем? Смотрите в моем. Поставьте в Е59 единицу. Кстати, Вы макросы разрешили при открытии файла?
О! пока писал, Вы уже поправили свой пост выше. Тогда добавка
У Вас макрос PIRR_Search находится именно в модуле с названием "Module1"? Макрос Private Sub Workbook_SheetChange находится именно в модуле КНИГИ?_Boroda_
_Boroda_, да, я все проверил, все по местам. MsgBox успешно запускается, большое спасибо.
Только возник странный побочный эффект после того, как я заменил MsgBox нужным кодом: у меня теперь эксель просто падает после внесения изменений в книгу, приводящих к изменению целевой ячейки (несколько раз пробовал - падает). при этом сам запускаемый макрос PIRR_Search при обычном запуске работает совершенно нормально.
в приложенном файле теперь есть код PIRR_Search, он довольно простой. с подобной проблемой сталкиваюсь впервые.
может ли это быть связано с тем, что вызываемый макрос PIRR_Search влияет на целевую ячейку, стараясь обратно приравнять её нулю? если да, то как лучше обойти эту нестыковку?
ещё раз спасибо!
_Boroda_, да, я все проверил, все по местам. MsgBox успешно запускается, большое спасибо.
Только возник странный побочный эффект после того, как я заменил MsgBox нужным кодом: у меня теперь эксель просто падает после внесения изменений в книгу, приводящих к изменению целевой ячейки (несколько раз пробовал - падает). при этом сам запускаемый макрос PIRR_Search при обычном запуске работает совершенно нормально.
в приложенном файле теперь есть код PIRR_Search, он довольно простой. с подобной проблемой сталкиваюсь впервые.
может ли это быть связано с тем, что вызываемый макрос PIRR_Search влияет на целевую ячейку, стараясь обратно приравнять её нулю? если да, то как лучше обойти эту нестыковку?
может ли это быть связано с тем, что вызываемый макрос PIRR_Search влияет на целевую ячейку
Адназначна! Для этого есть [vba]
Код
Application.EnableEvents=0
[/vba] Только не забудьте потом взад вернуть ее [vba]
Код
Application.EnableEvents=1
[/vba]
Всего должно вот так получиться [vba]
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Application.Calculate If Range("PNPV1").Value <> "" And Math.Abs(Range("PNPV1").Value) > 0.01 Then Application.EnableEvents = 0 Module1.PIRR_Search Application.EnableEvents = 1 End If End Sub
может ли это быть связано с тем, что вызываемый макрос PIRR_Search влияет на целевую ячейку
Адназначна! Для этого есть [vba]
Код
Application.EnableEvents=0
[/vba] Только не забудьте потом взад вернуть ее [vba]
Код
Application.EnableEvents=1
[/vba]
Всего должно вот так получиться [vba]
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Application.Calculate If Range("PNPV1").Value <> "" And Math.Abs(Range("PNPV1").Value) > 0.01 Then Application.EnableEvents = 0 Module1.PIRR_Search Application.EnableEvents = 1 End If End Sub