¿Cómo se puede obtener datos de hoja de cálculo en Excel para calcular de nuevo a sí misma desde dentro de VBA, sin el kluge de solo cambiar el valor de una celda?

6 Comentarios

  1. 56

    Las siguientes líneas se hará el truco:

    ActiveSheet.EnableCalculation = False  
    ActiveSheet.EnableCalculation = True  

    Edición: La .Calculate() método no funcionará para todas las funciones. He probado en una hoja con el complemento de las funciones de matriz. La producción de la hoja que estoy usando es bastante complejo que no quiero probar el .CalculateFull() método, pero es posible que funcione.

    • En realidad, hay .Calcular() y .CalculateFull() métodos para que, en diferentes niveles.
    • He probado Calcular en una hoja, y no todas las funciones en una celda recalcular. También se puede hacer cambiando el «sucio» poco, pero he encontrado esto para ser la solución más fácil.
    • El uso de la EnableCalculation propiedad es una buena idea, porque permite que una sola hoja para ser recalculado en la Hoja de cálculo de nivel. En contraste, Application.CalculateFull las fuerzas de un cálculo completo de todos los datos, no sólo en una sola Hoja de cálculo o un Libro, pero en todos los libros abiertos! Esto podría ser importante overkill, especialmente desde que el usuario puede tener varios no relacionados, potencialmente complicado, libros abiertos.
    • Escribí una respuesta acerca de cómo actualizar el libro activo sin hacerlo con el resto de los que están abiertos.
  2. 16

    Esto debe 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
    • véase el comentario en mi respuesta
  3. 8

    A veces Excel hipo y necesita un empujón para volver a aplicar una ecuación. Esto sucede en algunos casos, cuando usted está utilizando fórmulas personalizadas.

    Asegúrese de que tiene la siguiente secuencia de comandos

    ActiveSheet.EnableCalculation = True

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

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

    Esto puede ser un bucle como sea necesario.

  4. 6

    También puede intentar

    Application.CalculateFull

    o

    Application.CalculateFullRebuild

    si no te importa la reconstrucción de todos los libros abiertos, en lugar de la hoja de cálculo activa. (CalculateFullRebuild reconstruye las dependencias así.)

  5. 3

    Tuve un problema con la desactivación de una imagen de fondo (un PROYECTO de marca de agua) en VBA. Mi cambio no fue mostrando (el cual fue realizado con el Sheets(1).PageSetup.CenterHeader = "" método) – por lo que necesitaba una forma de actualizar. El ActiveSheet.EnableCalculation enfoque parte, hizo el truco, pero no cubierta de las celdas no utilizadas.

    Al final he encontrado lo que necesitaba con un forro que hizo la imagen desaparecen cuando ya no fue establecer :-

    Application.ScreenUpdating = True

  6. 0

    Después de una conexión de datos de actualización, algunos UDF no eran ejecución. El uso de una subrutina, yo estaba tratando de recalcuate una sola columna con:

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

    Pero por encima de declaración no tuvo ningún efecto. Ninguna de las soluciones anteriores ayudado, excepto kambeeks sugerencia para reemplazar las fórmulas funcionó y fue rápido si manual de recálculo encendido durante la actualización. A continuación el código solucionado mi problema, aunque no es exactamente responsable a OP «kluge» comentario, que proporcionan un rápido/solución fiable para forzar el cálculo de usuario-celdas especificadas.

    Application.Calculation = xlManual
    DoEvents
    For Each mycell In Sheets("mysheet").Range("D9:D750").Cells
        mycell.Formula = mycell.Formula
    Next
    DoEvents
    Application.Calculation = xlAutomatic

Dejar respuesta

Please enter your comment!
Please enter your name here