Страницы: 1
RSS
VBA анализ ячейки на нестабильное изменение
 
Добрый день, ни как не могу решить, прошу помочь.
Есть ячейка "C4" в ней стоит формула
Код
=ЕСЛИ(МИН(C2:C3)<ТДАТА();"";1)

И когда значение становиться = 1 должен запускаться код analiz
Дело в том, что он должен срабатывать сразу же без задержки.

Код
Sub analiz()

If Range("C4") = 1 Then
Application.EnableEvents = False
 Call smotrim
 Application.EnableEvents = True
 Range("C2") = 0
 End If

End Sub
 
Если в C2 и C3 константы, то поместите такой код в модуль листа.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("C2:C3")) Is Nothing Then
        analiz
    End If
End Sub
 
Спасибо за ответ но я использую Office 365 и из другого компьютера в ячейку С2 приходит информация и формула видит и меняет свой расчет, а код не работает
 
Как вариант, можно запускать проверку после смены выделения. Будет срабатывать чаще, чем #2.
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        analiz
End Sub
 
Да вы гений!
 
Цитата
МатросНаЗебре написал: Будет срабатывать чаще,
И не просто чаще, а при любой смене выделения. Можно диапазон срабатывания ограничить:
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Not Application.Intersect(Range("A2:D100"), Target) Is Nothing Then Call analiz
End Sub
 
vikttur, спасибо
End If не хватает. Работает спасибо сейчас буду тестировать запуск с другого компьютера
 
Цитата
Артур Рахматуллин написал:  End If не хватает.
Это Вы так думаете )
И как это оно работает, если чего-то не хватает?
 
Не смею спорить но она не работала пока не поставил end if.
 
Оператор If не требует закрытия (End If), если запись в одной строке.
Покажите пример, где не работает
 
Цитата
vikttur написал: в одной строке.
аааааа, я то перенес на другую строку)))) теперь условие понял!
 
О завершении пересчета формул говорит другое событие листа.
Код
Private Sub Worksheet_Calculate()
   If Range("C4").Value = 1 Then analiz
End Sub
Изменено: sokol92 - 17.04.2021 15:37:33
Владимир
 
Но и это не панацея. Неизвестно, что на листе и сколько раз за день (час, минуту) будет срабатывать событие пересчета
 
Цитата
sokol92 написал:
О завершении пересчета формул говорит другое событие листа.
Согласен но файл находится в облаке и после завершения расчета данный код ждет изменений с моей стороны, а этого не будет происходить. Изменения будут делать с другого компьютера а данный код этого не увидет и не запустится на пересчет. В этом то вся и беда
 
Цитата
Артур Рахматуллин написал:
данный код этого не увидет и не запустится на пересчет.
Прошу прощения за опечатку в имени события!
В ячейкe С4 стоит формула. Вам нужно запустить перерасчет, когда значение этой формулы станет 1. По окончанию любого перерасчета формул листа будет вызвано событие Calculate. К тому же, поскольку у Вас в ячейке C4 "летучая" формула, по событие Calculate будет вызываться при изменении любой ячейки любого листа любой открытой книги.
Владимир
 
Цитата
sokol92 написал:  у Вас в ячейке C4 "летучая" формула
Во это то что необходимо! прошу прощения не сразу понял код! Огромное спассибо
 
Спасибо, успехов!
Владимир
Страницы: 1
Наверх