Есть ли функция Excel VB, которая будет постоянно проверять лист? - PullRequest
2 голосов
/ 04 января 2012

У меня есть выпадающий список с различными вариантами.Для каждого параметра определенные ячейки форматируются на основе значений.

Поскольку значения меняются каждые несколько секунд, программе необходимо постоянно проверять соблюдение условий.Кто-нибудь знает, как программа может проверять лист каждые несколько секунд ???

1 Ответ

0 голосов
/ 11 января 2013

В зависимости от ваших потребностей, любой из трех различных подходов может удовлетворить ваши потребности.

Событие Excel Worksheet_Change возникает, когда рабочий лист изменяется пользователем, исключая изменения значений формул ячеек из-за пересчета, но включая изменения по коду. Код VBA обычно будет выглядеть так:

    Sub Worksheet_Change(ByVal Target As Range)
       Application.EnableEvents = False
       ' <test or set scope of action of the macro>
       ' <do something>
       Application.EnableEvents = True
    End Sub

Аргумент Target является встроенным и всегда ссылается на ячейку, которая была изменена и инициировала событие. Ваш код должен быть размещен в модуле рабочего листа (доступ к нему проще всего щелкнуть правой кнопкой мыши на вкладке рабочего листа и выбрать «Просмотреть код»), а не в стандартном модуле.

Событие Worksheet_Calculate наступает после пересчета листа, включая автоматический пересчет. Код будет выглядеть так:

    Sub Worksheet_Calculate()
       Application.EnableEvents = False
       ' <do something>
       Applicaton.EnableEvents = True
    End Sub

Обратите внимание, что это событие не обеспечивает цель, то есть срабатывает для всех пересчитанных ячеек, а не для одной. Если ваш код не вызывает перерасчет, вам не нужно будет отключать, а затем повторно включать события. Если вы хотите, чтобы ваш код пересчитывал только выбранные ячейки, вы можете установить расчет вручную (Application.Calculation = xlManual), а затем сбросить его на автоматический при выходе из процедуры (Application.Calculation = xlAutomatic). Как и в случае события Worksheet_Change, ваш код должен быть помещен в модуль рабочего листа.

Или, наконец, вы можете установить таймер для периодического перезапуска кода, используя событие Excel.OnTime или таймеры Windows. Ваша процедура должна включать код для запуска таймера и его остановки. Пример использования события OnTime см. В этом SO answer . Объяснение использования таймера Windows (а также события Application.OnTime) см. В обзоре Чипа Пирсона здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...