una - refrescar hoja excel vba




Actualizar los resultados de la función Excel VBA (6)

¿Alguien sabe cómo puedo obtener una función definida por el usuario para volver a evaluar a sí mismo (sobre la base de datos modificados en la hoja de cálculo)? He probado F9 y Shift + F9 , pero esos no funcionan. Lo único que parece funcionar es editar la celda con la llamada a la función y luego presionar Enter. ¿Algunas ideas? Me parece recordar haber sido capaz de hacer esto ...


Algo más de información sobre los atajos de teclado F9 para el cálculo en Excel

  • F9 vuelve a calcular todas las hojas de trabajo en todos los libros abiertos
  • Shift + F9 Recalcula la hoja de trabajo activa
  • Ctrl + Alt + F9 vuelve a calcular todas las hojas de trabajo en todos los libros abiertos (recálculo completo)
  • Shift + Ctrl + Alt + F9 Reconstruye el árbol de dependencias y realiza un recálculo completo

De acuerdo, encontré este yo mismo. Puede usar Ctrl + Alt + F9 para lograr esto.


Para cambiar a Automático:

Application.Calculation = xlCalculationAutomatic    

Para cambiar a Manual:

Application.Calculation = xlCalculationManual    

Si incluye TODAS las referencias a los datos de la hoja de cálculo en la lista de parámetros de la UDF, Excel recalculará su función siempre que los datos a los que se hace referencia cambien:


    Public Function doubleMe(d as variant)
    doubleMe=d*2
    end Function

También puede usar Application.Volatile, pero esto tiene la desventaja de hacer que su UDF siempre recalcule, incluso cuando no es necesario porque los datos a los que se hace referencia no han cambiado.


    Public Function doubleMe()
    Application.Volatile
    doubleMe=Worksheets("Fred").Range("A1")*2
    end Function


Debe usar Application.Volatile en la parte superior de su función:

Function doubleMe(d)
    Application.Volatile
    doubleMe = d * 2
End Function

Luego se reevaluará cada vez que el libro de trabajo cambie (si su cálculo está configurado en automático).


Public Sub UpdateMyFunctions()
    Dim myRange As Range
    Dim rng As Range

    'Considering The Functions are in Range A1:B10
    Set myRange = ActiveSheet.Range("A1:B10")

    For Each rng In myRange
        rng.Formula = rng.Formula
    Next
End Sub






user-defined-functions