Майк регулярно использует ВПР в своих таблицах, но задается вопросом, есть ли способ заставить функцию запускать макрос, если она не может вернуть значение.

Есть несколько способов решить эту проблему. Во-первых, вы можете использовать условную формулу, чтобы определить, вернет ли функция ВПР значение или ошибку. Если он вернет ошибку, вы можете заставить формулу запускать пользовательскую функцию (MyUDF), как показано здесь:

=IF(ISERROR(VLOOKUP(B2,CODES,1,FALSE)),MyUDF(), VLOOKUP(B2,CODES,1,FALSE))

Все, что вам нужно сделать, это убедиться, что вы поместили свой фактический код VLOOKUP в формулу (дважды) и заменили MyUDF на имя определяемой пользователем функции, которую вы хотите запустить.

Другой подход — настроить обработчик событий для события Calculate.

Это может быть довольно просто, например:

Private Sub Worksheet_Calculate()

If IsError(Range("A1")) Then Call Macro1 End Sub

В этом примере предполагается, что формула ВПР находится в ячейке A1 и вы хотите запустить макрос с именем Macro1, если функция ВПР возвращает ошибку. Тогда ваш макрос сможет делать все, что вам нужно. Также помните, что обработчик события Calculate должен быть помещен в объект ThisWorksheet.

Вы также можете сделать обработчик событий Calculate более надежным, как показано здесь:

Private Sub Worksheet_Calculate()

On Error GoTo myMac     Worksheets(1).Select     If Range("A1").Value Then         Exit Sub     End If myMac:

Macro1   'macro to run if VLOOKUP fails End Sub

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (10107) относится к Microsoft Excel 2007 и 2010. Вы можете найти версию этого совета для более старого интерфейса меню Excel здесь:

link: / excel-Making_VLOOKUP_Trigger_a_Macro [Создание запуска макроса VLOOKUP].