O Excel recalcula os UDFs somente quando suas alterações de entrada
Você criou uma função definida pelo usuário (UDF). O Excel só executa o código de uma UDF quando as células que servem como entrada para a função são alteradas.
Por exemplo, suponha que eu tenha essa UDF:
Public Function MyFunction(Target As Range)
MsgBox "The target cell's address is " & Target.Address
End Function
E na célula A1 em minha planilha, faço referência à célula com a fórmula:
=MyFunction(A2)
Durante o uso normal da minha pasta de trabalho, o código da minha UDF só será chamado se houver uma alteração no conteúdo da célula A2 ou outra célula referenciada por uma fórmula na A2.
Soluções
Você pode contornar esse comportamento de várias maneiras:
- Force o Excel a recalcular manualmente todas as fórmulas da pasta de trabalho, mesmo que elas não tenham sido alteradas desde o último cálculo, por pressionando Ctrl + Alt + F9 no Windows e (suponho no Mac) Cmd + Alt + F9 . Se isso não funcionar, você também pode tentar adicionar Shift que adicionalmente verifica as fórmulas dependentes antes de recalcular.
-
Inclua uma função volátil em uma das células referenciadas pelo seu UDF. Faça isso modificando a definição da sua função VBA para aceitar um parâmetro adicional:
Public Function MyFunction(Target As Range, Optional VolatileParameter As Variant)
Em seguida, edite a célula que faz referência à sua UDF para passar o resultado de uma função volátil, como
Now()
, para a UDF:=MyFunction(A2,Now())
O resultado líquido será que o Excel considerará a célula que contém a referência ao seu UDF como precisando ser recalculada toda vez que a planilha for alterada porque ela faz referência a uma função volátil.
-
Edite a célula que contém o UDF. Basta entrar na célula e, em seguida, pressionar Enter sem fazer alterações devem ser suficientes para acionar uma atualização.
-
Crie um botão de macro que execute a seguinte linha de código :
Application.CalculateFull
-
Coloque o código a seguir no evento Open da sua Pasta de Trabalho:
ActiveWorkbook.ForceFullCalculation = True
Isso faz com que o Excel sempre recalcule todas as fórmulas , independentemente de ser necessário recalcular. Essa configuração permanece em vigor até que o Excel seja reiniciado.
Por que o Excel nunca recalcula meu UDF?
Quando o Excel executa um recálculo automático, ele não recalcula todas as fórmulas na pasta de trabalho. Em vez disso, ele apenas atualiza as células que contêm fórmulas que se referem à célula modificada mais recentemente. Esse método evita o processo muito mais demorado de executar desnecessariamente muitos cálculos em toda a pasta de trabalho apenas para obter o mesmo resultado para a grande maioria deles.
Com um UDF, as únicas referências na pasta de trabalho das quais o mecanismo de cálculo do Excel está ciente são aquelas identificadas nas entradas da função. O Excel não pode examinar o código VBA dentro da UDF e identificar outras células que podem influenciar a saída da função. Portanto, embora o autor da função possa construir a função para retornar resultados diferentes com base em qualquer número de alterações feitas na pasta de trabalho, as únicas células que o Excel sabe alterarão o resultado da função são as entradas declaradas. Portanto, as alterações nessas células são as únicas em que o Excel presta atenção ao decidir se a UDF precisa ser recalculada.