Необходимо остановить пересчет 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 написаны эффективно.

Ответы на вопрос(2)

Ваш ответ на вопрос