Application.Volatile не пересчитывает функции при изменении значений в другой книге - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть книга Excel, которая использует Application.Volatile в трех пользовательских функциях.Ниже приведен пример одной из функций, две другие очень похожи.Все, что они делают, - это находят значение в указанной рабочей таблице и возвращают ее в сводную рабочую таблицу.

Function estimated_commission(client As Range) As Double

    Application.Volatile

    Name = CStr(client.Value)
    pull_value = Worksheets(Name).Range("A500").End(xlUp).Offset(0, 5).Value

    estimated_commission = pull_value

End Function

Функция работает так, как я планировал, когда у конечного пользователя есть только рабочая книга, использующая открытые функции.Для параметров расчета для книги задано значение Автоматически.

Проблема возникает, когда пользователь изменяет значение ячейки или сохраняет другую книгу.Эти рабочие книги не имеют отношения к рабочей книге с пользовательскими функциями.Когда пользователь повторно активирует рабочую книгу с функциями, все пользовательские функции возвращают ошибку # ЗНАЧЕНИЕ.Нажатие клавиши F9 или пересчет листа удалит все ошибки и вернет правильные значения.

Есть ли способ предотвратить возникновение этой проблемы?

1 Ответ

0 голосов
/ 06 февраля 2019

Worksheets(Name) отсутствует ссылка на свою рабочую книгу.Если вы не ссылаетесь на рабочую книгу, Excel принимает значение ActiveWorkbook, которое имеет фокус / находится сверху.Так что это рабочая книга, на которую переключился пользователь, и, вероятно, у нее нет рабочей таблицы с именем Name, и поэтому ваша функция выдает ошибки и возвращает #VALUE.

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

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