Actualizar los resultados de la función Excel VBA
-
08-06-2019 - |
Pregunta
¿Alguien sabe cómo puedo hacer que una función definida por el usuario se reevalúe a sí misma (en función de los datos modificados en la hoja de cálculo)?He intentado F9 y Cambio+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?Creo recordar haber podido hacer esto...
Solución
Deberías usar Application.Volatile
en la parte superior de tu función:
Function doubleMe(d)
Application.Volatile
doubleMe = d * 2
End Function
Luego volverá a evaluar cada vez que cambie el libro (si su cálculo está configurado en automático).
Otros consejos
Un poco más de información sobre los atajos de teclado F9 para cálculo en Excel
- F9 Vuelve a calcular todas las hojas de trabajo en todos los libros abiertos
- Cambio+ F9 Vuelve a calcular la hoja de trabajo activa.
- Control+Alt.+ F9 Vuelve a calcular todas las hojas de trabajo en todos los libros abiertos (nuevo cálculo completo)
- Cambio + Control+Alt.+ F9 Reconstruye el árbol de dependencia y realiza un nuevo cálculo completo.
Bien, encontré este yo mismo.Puedes usar Control+Alt.+F9 para lograr esto.
Si incluye TODAS las referencias a los datos de la hoja de cálculo en la lista de parámetros UDF, Excel recalculará su función cada vez que cambien los datos a los que se hace referencia:
Public Function doubleMe(d As Variant)
doubleMe = d * 2
End Function
También puedes usar Application.Volatile
, pero esto tiene la desventaja de hacer que su UDF siempre se recalcule, incluso cuando no sea 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
Para cambiar a Automático:
Application.Calculation = xlCalculationAutomatic
Para cambiar a Manual:
Application.Calculation = xlCalculationManual
El Application.Volatile
no funciona para recalcular una fórmula con mi propia función dentro.Yo uso la siguiente función:Application.CalculateFull
Esto actualiza el cálculo mejor que Range(A:B).Calculate
:
Public Sub UpdateMyFunctions()
Dim myRange As Range
Dim rng As Range
' Assume the functions are in this range A1:B10.
Set myRange = ActiveSheet.Range("A1:B10")
For Each rng In myRange
rng.Formula = rng.Formula
Next
End Sub
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