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...

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top