Необходимо остановить пересчет UDF при удалении несвязанных ячеек

Я заметил, что мои UDF пересчитываются всякий раз, когда я удаляю ячейки. Это вызывает огромные задержки при удалении целых столбцов, потому что UDF вызывается для каждой ячейки, в которой он используется. Поэтому, если вы используете 1000 UDFS, удаление столбца или ячейки вызовет его 1000 раз.

Например, поместите следующий UDF в модуль, а затем вызовите его из рабочего листа несколько раз с помощью = HelloWorld ()

Function HelloWorld()
HelloWorld = "HelloWorld"
Debug.Print Now()
End Function

Затем удалите строку. Если ваш опыт похож на мой, вы увидите, что он вызывается один раз для каждого случая использования.

У кого-нибудь есть идеи, можно ли остановить это поведение? Мне также было бы интересно, почему это должно быть вызвано. Для меня это выглядит как изъян в дереве зависимостей Excel, но вполне может быть веская причина.

Изменить: После экспериментов, я нашел больше действий, которые запускают UDFS:

Любое изменение в количествестолбцы что ListObject (т.е. таблица Excel) охватывает изменение размера (ноне строки). Даже если сами UDF не включены в рассматриваемый объект ListObject или фактически находятся влюбой ListObject вообще.Добавление новых ячеек или столбцов в любом месте листа (но не строк).

Обратите внимание, что Ручной режим Calc не вариант на нескольких фронтах.

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

Во-вторых, я на самом деле не занимаюсь разработкой конкретной электронной таблицы, а скорее пишу книгу о том, как не разработчики могут использовать хорошо написанный готовый код, такой как UDF, для выполнения действий, которые в противном случае были бы за их пределами. Примеры включают в себя динамическое объединение или разбиение текста, или UDF бинарного поиска с точным соответствием, которое Чарльз Уильямс обрисовал в общих чертахhttps://fastexcel.wordpress.com/2011/07/22/developing-faster-lookups-part-2-how-to-build-a-faster-vba-lookup/ (И да, я даю им много предупреждений, что обычно решение на основе собственных формул превосходит UDF. Но, как вы увидите из потока, на который я ссылался выше, тщательно написанные функции могут работать хорошо).

Я не знаю, как пользователи будут использовать их.

В отсутствие программного решения, мне кажется, мне просто нужно указать в книге, что пользователи могут испытывать значительную задержку при добавлении или удалении ячеек или изменении размера объектов ListObject, если они используют ресурсоемкую UDFS. Даже если эти UDF написаны эффективно.