É necessário interromper o recálculo das UDFs quando células não relacionadas são excluídas

Percebi que meus UDFs recalculam sempre que excluo células. Isso causa grandes atrasos ao excluir colunas inteiras, porque o UDF é chamado para cada célula em que é usado. Portanto, se você estiver usando 1000 UDFS, a exclusão de uma coluna ou célula o chamará 1000 vezes.

A título de exemplo, coloque o UDF a seguir em um módulo e chame-o da planilha várias vezes com = HelloWorld ()

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

Em seguida, exclua uma linha. Se sua experiência for como a minha, você verá que é chamada uma vez para cada instância de uso.

Alguém tem alguma idéia de se esse comportamento pode ser interrompido? Eu também estaria interessado em saber por que deveria ser chamado. Parece uma falha na árvore de dependência do Excel para mim, mas pode muito bem haver uma boa razão.

Edit: Após a experimentação, encontrei mais ações que acionam o UDFS:

Qualquer alteração no número decolunas que um ListObject (ou seja, Tabela do Excel) abrange o redimensionamento (masnão linhas). Mesmo que as UDFs não estejam no ListObject em questão, ou de fatoqualquer ListObject.Adicionando novas células ou colunas em qualquer lugar da planilha (mas não nas linhas).

Observe que o Manual Calc Mode não é uma opção em várias frentes.

Primeiramente, como é uma configuração no nível do aplicativo, ela simplesmente apresenta um risco muito grande de alguém usar a saída de qualquer uma das planilhas que eles abrirem sem perceber que está no modo de cálculo manual.

Em segundo lugar, na verdade, não estou projetando uma planilha específica, mas estou escrevendo um livro sobre como os não desenvolvedores podem utilizar códigos prontos para uso, como UDFs, para criar coisas que, de outra forma, estariam além deles. Os exemplos incluem concatenar ou dividir dinamicamente o texto ou a UDF de pesquisa binária de correspondência exata que Charles Williams descreve emhttps://fastexcel.wordpress.com/2011/07/22/developing-faster-lookups-part-2-how-to-build-a-faster-vba-lookup/ (E sim, aviso a eles que geralmente uma solução nativa baseada em fórmula supera um UDF. Mas, como você verá no thread que referi acima, funções cuidadosamente escritas podem ter um bom desempenho).

Não sei como os usuários os empregarão.

Na ausência de uma solução de programação, parece que vou ter de salientar no livro que os usuários podem sofrer um atraso significativo ao adicionar ou excluir células ou redimensionar o ListObjects se tiverem UDFS com uso intensivo de recursos. Mesmo que esses UDFs sejam escritos com eficiência.

questionAnswers(2)

yourAnswerToTheQuestion