Es necesario detener el recálculo de UDF cuando se eliminan celdas no relacionadas

Me di cuenta de que mis UDF se recalculan cada vez que elimino celdas. Esto causa demoras masivas al eliminar columnas enteras, porque se llama al UDF para todas y cada una de las celdas en las que se usa. Por lo tanto, si está usando 1000 UDFS, al eliminar una columna o celda lo llamará 1000 veces.

A modo de ejemplo, coloque el siguiente UDF en un módulo, luego llámelo desde la hoja de trabajo varias veces con = HelloWorld ()

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

Luego borra una fila. Si su experiencia es como la mía, verá que se llama una vez por cada instancia de uso.

¿Alguien tiene alguna idea de si este comportamiento se puede detener? También me interesaría por qué debería llamarse. Me parece una falla en el árbol de dependencia de Excel, pero puede haber una buena razón.

Editar: después de la experimentación, he encontrado más acciones que desencadenan UDFS:

Cualquier cambio en el número decolumnas que un objeto ListObject (es decir, tabla de Excel) abarca el cambio de tamaño (perono filas). Incluso si los UDF en sí no están en el ListObject en cuestión, o de hecho enalguna ListObject en absoluto.Agregar nuevas celdas o columnas en cualquier lugar de la hoja (pero no filas).

Tenga en cuenta que el modo de cálculo manual no es una opción en varios frentes.

En primer lugar, dado que es una configuración de nivel de aplicación, simplemente presenta un riesgo demasiado grande de que alguien use la salida de cualquiera de las hojas de cálculo que tienen abiertas sin darse cuenta de que están en modo de cálculo manual.

En segundo lugar, en realidad no estoy diseñando una hoja de cálculo en particular, sino que estoy escribiendo un libro sobre cómo los no desarrolladores pueden utilizar código comercial bien escrito, como los UDF, para hacer cosas que de otro modo estarían más allá de ellos. Los ejemplos incluyen concatenación dinámica o división de texto, o el UDF de búsqueda binaria de coincidencia exacta que Charles Williams describe enhttps://fastexcel.wordpress.com/2011/07/22/developing-faster-lookups-part-2-how-to-build-a-faster-vba-lookup/ (Y sí, les advierto mucho que, por lo general, una solución nativa basada en fórmulas superará a un UDF. Pero como verán en el hilo al que he hecho referencia anteriormente, las funciones escritas cuidadosamente pueden funcionar bien).

No sé cómo los usuarios los emplearán.

En ausencia de una solución de programación, parece que tendré que señalar en el libro que los usuarios pueden experimentar un retraso significativo al agregar o eliminar celdas o al cambiar el tamaño de ListObjects si tienen UDFS intensivo en recursos. Incluso si esos UDF se escriben de manera eficiente.

Respuestas a la pregunta(2)

Su respuesta a la pregunta