В этой статье мы продемонстрируем простую альтернативу Application.OnTime для периодического запуска VBA-процедур в MS Excel.
Предположим, что мы связали рабочую книгу MS Excel с каким-то внешним источником данных (напр., листом MS SharePoint или базой данных MS Access) и что данные автоматически обновляются каждые 2 минуты пока рабочая книга открыта, – это можно настроить при помощи Подключений.
Предположим также, что наша рабочая книга обрабатывает импортированные данные и что результат этих вычислений должен быть виден другим рабочим книгам, – для реализации последнего требования мы должны сохранять нашу рабочую книгу.
Программный код 1 демонстрирует, как сохранять рабочую книгу всякий раз после импорта внешних данных на соответствующий лист.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim xDiAl As Boolean
xDiAl = Application.DisplayAlerts
Application.DisplayAlerts = False
ThisWorkbook.Save
Application.DisplayAlerts = xDiAl
End Sub
Событие Worksheet_Change запускается каждый раз после импорта внешних данных (даже если не было никаких изменений в данных) и, в свою очередь, может запускать подпроцедуру, как показано в Программном коде 2.
Private Sub Worksheet_Change(ByVal Target As Range)
Call xSubProc
End Sub
Таким образом, мы можем использовать этот подход в качестве простой альтернативы для Application.OnTime и планировать периодическое выполнение VBA-процедур при помощи интервала обновления, установленного в Свойствах подключения, как показано на Рис. 1.