2008-08-14 16 views
55

¿Alguien sabe cómo puedo obtener una función definida por el usuario para reevaluarse a sí misma (según los datos modificados en la hoja de cálculo)? He intentado F9 y Shift +F9, pero los que no trabajo. Lo único que parece funcionar es editar la celda con la llamada a la función y luego presionar Enter. ¿Algunas ideas? Parece que recuerdo haber podido hacer esto ...Actualizar Excel Función VBA Resultados

Respuesta

93

Debe utilizar Application.Volatile en el comienzo de su función:

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

A continuación, volver a evaluar cada vez que cambia libro (si su cálculo se establece en Automático).

+2

Eso es impresionante, yo no sabía que, gracias un montón –

+13

Gracias, acaba de golpear mi cabeza contra un escritorio sobre esto. Debe señalar, sin embargo, que en Excel 2010, debe pasar True a Application.Volatile, es decir 'Application.Volatile True'. – mdm

+2

GRACIAS. TÚ. ¡Te compraría cerveza si pudiera! –

13

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

+0

Esta es su única opción si tiene Excel 2007 ya que se añadió el método 'Application.Volatile' de 2010 Office –

28

Algunos más información sobre los métodos abreviados 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 vuelve a calcular la hoja de cálculo activa
  • Ctrl + Alt + F9 vuelven a calcular todas las hojas de trabajo en todos los libros abiertos (actualización completa)
  • Shift + Ctrl + Alt + F9 Reconstruye el árbol de dependencias y hace un nuevo cálculo completo
9

Si se 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 puede utilizar Application.Volatile, pero esto tiene la desventaja de hacer su UDF siempre vuelve a calcular, incluso cuando no es necesario porque los datos de referencia no ha cambiado.


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

-1
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 
+0

Por favor, explique el código un poco. Aumentaría la utilidad bastante. – Trilarion

+0

rng.Formula = rng.Fórmula es lo mismo que ingresar una celda y presionar enter nuevamente. Obliga a Excel a calcular nuevamente la celda, incluidas las funciones personalizadas. –

1

Para cambiar a Automático:

Application.Calculation = xlCalculationAutomatic  

Para cambiar a Manual:

Application.Calculation = xlCalculationManual  
+0

¿Por qué downvotes? realmente funciona! – Tuscan

+0

Gracias. funcionó para mí también – ayman

1

Funciona bien éste para actualizar el cálculo mejor que Rango (A: B). Calcule

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

El Application.Volatile no funciona para volver a calcular una fórmula con mi propia función dentro. Puedo utilizar la siguiente función: Application.CalculateFull