Pregunta

¿Cómo se obtienen los datos de la hoja de cálculo en Excel para recalcularse desde dentro de VBA, sin el simple cambio de un valor de celda?

¿Fue útil?

Solución

Las siguientes líneas harán el truco:

ActiveSheet.EnableCalculation = False  
ActiveSheet.EnableCalculation = True  

Editar: El método .Calculate () no funcionará para todas las funciones. Lo probé en una hoja con funciones de matriz de complemento. La hoja de producción que estoy usando es lo suficientemente compleja como para no probar el método .CalculateFull () , pero puede funcionar.

Otros consejos

Esto debería hacer el truco ...

'recalculate all open workbooks
Application.Calculate

'recalculate a specific worksheet
Worksheets(1).Calculate

' recalculate a specific range
Worksheets(1).Columns(1).Calculate

En ocasiones, Excel puede tener problemas y necesita un inicio rápido para volver a aplicar una ecuación. Esto sucede en algunos casos cuando estás utilizando fórmulas personalizadas.

Asegúrate de que tienes el siguiente script

ActiveSheet.EnableCalculation = True

Vuelva a aplicar la ecuación de elección.

Cells(RowA,ColB).Formula = Cells(RowA,ColB).Formula

Luego se puede hacer un bucle según sea necesario.

También puedes probar

Application.CalculateFull

o

Application.CalculateFullRebuild

si no te importa reconstruir todos los libros abiertos, en lugar de solo la hoja de cálculo activa. ( CalculateFullRebuild también reconstruye las dependencias).

Tuve un problema con la desactivación de una imagen de fondo (una marca de agua BORRADOR) en VBA. Mi cambio no se estaba mostrando (que se realizó con el método Sheets (1) .PageSetup.CenterHeader = " " ), por lo que necesitaba una manera de actualizar. El enfoque de ActiveSheet.EnableCalculation en parte funcionó, pero no cubrió las celdas no utilizadas.

Al final encontré lo que necesitaba con un forro que hizo que la imagen desapareciera cuando ya no estaba configurada: -

Application.ScreenUpdating = True

Después de una actualización de la conexión de datos, algunas UDF no se estaban ejecutando. Usando una subrutina, intentaba recalcular una sola columna con:

Sheets("mysheet").Columns("D").Calculate

Pero la declaración anterior no tuvo efecto. Ninguna de las soluciones anteriores ayudó, excepto la sugerencia de kambeeks para reemplazar las fórmulas que funcionaron y fue rápida si el recálculo manual se activó durante la actualización. El siguiente código solucionó mi problema, incluso si no era exactamente responsable de OP " kluge " comentando, proporcionó una solución rápida / confiable para forzar el nuevo cálculo de las celdas especificadas por el usuario.

Application.Calculation = xlManual
DoEvents
For Each mycell In Sheets("mysheet").Range("D9:D750").Cells
    mycell.Formula = mycell.Formula
Next
DoEvents
Application.Calculation = xlAutomatic
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top