Creo que estoy escuchando que necesita una forma de controlar si se ejecutó cada paso dentro de los cálculos que se están realizando.
Suponiendo que usted no está interesado en la reingeniería del libro de utilizar métodos que son más fáciles de seguir que las hojas de cálculo (como cálculos volátiles dentro de VBA o tablas dinámicas), esto puede funcionar para usted:
Dentro de VB, puede utilizar .EnableCalculation y . Calcule para establecer una hoja de cálculo completa como "Sucia" (que necesita cálculo) y luego vuelva a calcular. La diferencia clave entre este y su proceso actual es que realizaremos estas acciones una hoja de cálculo a la vez en modo manual. Al iniciar los cálculos una hoja de trabajo a la vez desde dentro de VBA, podrá realizar acciones intermedias adicionales que se pueden usar para rastrear qué tan lejos llegó en el proceso de cálculo.
Tenga en cuenta que este enfoque supone una estructura de libro bastante lineal de modo que su libro de trabajo producirá los resultados correctos si primero recalcula Sheet1, luego Sheet2, Sheet3, y así sucesivamente, en el orden que desee. Si las dependencias de su fórmula son más "espaguetis" que lineales, probablemente esto no funcione para usted. También supone que está trabajando en Excel 2000 o posterior.
Por ejemplo, podría escribir una rutina de VBA que cumpla con los siguientes pasos. Deberá conocer sus dependencias para saber qué cálculos deben presentarse antes que otros, y comenzar con la hoja de trabajo en un estado "limpio" donde no hay cálculos actualmente pendientes.
Paso 1: Establecer la hoja activa a la primera hoja de cálculo donde se necesita un nuevo cálculo
Paso 2: Ajuste el modo de cálculo manual de la siguiente manera:
Application.Calculation = xlCalculationManual
Paso 3 : "Sucio" toda la hoja activa de la siguiente manera:
With ActiveSheet
.EnableCalculation = False
.EnableCalculation = True
Paso 4: Iniciar un nuevo cálculo para esta hoja de trabajo solamente (no todo el libro de trabajo) usando:
.Calculate
End With
Observe que si el modo de cálculo se establece en automático, Paso 3 iniciaría un nuevo cálculo a través de la libro de trabajo completo. Al usar el modo manual y With, estamos limitando ese cálculo a la hoja actual.
Ahora has ensuciado y vuelto a calcular la primera hoja (¡hurra!). Ahora, al incorporar los pasos 3 y 4 en un bucle For/Each o For/Next, puede repetir el proceso para cada hoja de trabajo en su libro de trabajo. De nuevo, asegúrese de conocer el orden en el que deben calcularse sus hojas de trabajo (si se necesita un pedido).
Ahora para el gran final: al crear una variable de contador dentro de su ciclo, puede rastrear qué tan lejos ingresó en los cálculos al actualizar el valor de la variable de contador cada vez que completa un cálculo de hoja de cálculo. Por ejemplo, después de volver a calcular una hoja de cálculo, puede establecer el valor del contador en el valor actual + 1 y almacenar los resultados en una variable global (para que persista incluso después de que termine su rutina VBA) o en una celda dentro de su hoja de trabajo . De esta forma, puede verificar este valor más tarde para ver cuántas hojas de trabajo se actualizaron antes de que los cálculos se completaran o se interrumpieran.
Si tiene relativamente pocas hojas de trabajo en sus libros de trabajo, el mismo enfoque podría aplicarse a un rango a la vez en lugar de una hoja.
No entraré en detalles sobre cómo construir un "contador", bucles o variables globales aquí, pero si es necesario, esta información se puede encontrar fácilmente usando su motor de búsqueda favorito. También recomiendo volver a habilitar los cálculos automáticos una vez que haya terminado, ya que es fácil olvidar que se ha configurado en modo manual.
Espero que esto funcione para usted - para obtener más información sobre los modos de cálculo y recálculo, esto es un enlace útil: http://msdn.microsoft.com/en-us/library/bb687891.aspx
Puede evitar que ocurra una interrupción, pero le sugiero que dedique un poco de esfuerzo a acelerar el cálculo: una hora para calcular es extremadamente excesiva. Ver http://www.decisionmodels.com/optspeed.htm o http://msdn.microsoft.com/en-us/library/ff700515.aspx –
Estoy totalmente de acuerdo. Pero incluso si reduzco el tiempo de ejecución de la secuencia de comandos en un orden de magnitud, se ejecutará durante 6 minutos, y todavía me pregunto, dada la tendencia de Excel a ser tan silencioso sobre el cálculo interrumpido, si mis datos son precisos. Estoy realmente menos interesado en evitar la interrupción y más interesado en saber si ocurrió una interrupción. – BenTobin
Gran pregunta. Observé que cuando se interrumpe el cálculo, aparece la palabra "Calcular" en la barra de estado. Aparte de simplemente mirar la barra de estado, no sé de ninguna manera para aprovechar esa información. – JimmyPena