Actualizar Resultados de la Función VBA de Excel


¿Alguien sabe cómo puedo hacer que una función definida por el usuario se vuelva a evaluar a sí misma (en función de los datos modificados en la hoja de cálculo)? He probado F9 y Cambio+F9, pero los que no funcionan. Lo único que parece funcionar es editar la celda con la llamada a la función y luego presionar Enter. Alguna idea? Me parece recordar haber sido capaz de hacer esto...

Author: ashleedawg, 2008-08-14

8 answers

Debes 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 de trabajo (si su cálculo está configurado en automático).

 99
Author: vzczc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-28 16:33:28

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

  • F9 Recalcula todas las hojas de trabajo en todos los libros abiertos
  • Mayús+ F9 Recalcula la hoja de trabajo activa
  • Ctrl+Alt+ F9 Recalcula todas las hojas de trabajo en todos los libros abiertos (recalculación completa)
  • Cambio + Ctrl+Alt+ F9 Reconstruye el árbol de dependencias y hace un nuevo cálculo completo
 31
Author: Robert Mearns,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-21 17:58:18

Bien, encontré este yo mismo. Usted puede utilizar Ctrl+Alt+F9 para lograr esto.

 13
Author: Brian Sullivan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-21 15:33:04

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


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

También puede utilizar la aplicación.Inestable, pero esto tiene la desventaja de hacer que su UDF siempre recalcule, incluso cuando no es necesario porque los datos referenciados no han cambiado.


    Public Function doubleMe()
    Application.Volatile
    doubleMe=Worksheets("Fred").Range("A1")*2
    end Function
 9
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-29 15:52:31

Para cambiar a Automático:

Application.Calculation = xlCalculationAutomatic    

Para cambiar a Manual:

Application.Calculation = xlCalculationManual    
 1
Author: ayman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-03 19:22:59

Funciona bien este para actualizar el cálculo mejor que Range(A:B).Calcular

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
 1
Author: MfJ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-10 00:32:07
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
 -1
Author: Prashanth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-22 12:34:53

El Application.Volatile no funciona para recalcular una fórmula con mi propia función dentro. Utilizo la siguiente función: Application.CalculateFull

 -2
Author: alex303411,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-21 09:12:20