Atualização de VBA do Excel Função de Resultados
-
08-06-2019 - |
Pergunta
Alguém sabe como eu posso obter uma função definida pelo usuário para re-avaliar o próprio (baseado em dados alterados na folha de cálculo)?Eu tentei F9 e Mudança+F9, mas aqueles que não funcionam.A única coisa que parece funcionar é a edição da célula com a chamada de função e, em seguida, premindo Enter.Qualquer idéias?Eu me lembro de ser capaz de fazer isso...
Solução
Você deve usar Application.Volatile
no topo de sua função:
Function doubleMe(d)
Application.Volatile
doubleMe = d * 2
End Function
Em seguida, ele irá reavaliar sempre que as alterações de pasta de trabalho (se o seu cálculo é definido para automático).
Outras dicas
Mais algumas informações sobre o F9 atalhos de teclado para o cálculo no Excel
- F9 Recalcula todas as planilhas em todas as pastas de trabalho abertas
- Mudança+ F9 Recalcula a planilha ativa
- Ctrl+Alt+ F9 Recalcula todas as planilhas em todas as pastas de trabalho abertas (recálculo Completo)
- Mudança + Ctrl+Alt+ F9 Reconstrói a árvore de dependência e não de um cálculo completo
Ok, encontrei este um para mim.Você pode usar Ctrl+Alt+F9 para conseguir isso.
Se você incluir TODAS as referências para os dados da planilha na UDF lista de parâmetros, Excel recalculará a sua função sempre que os dados referenciados alterações:
Public Function doubleMe(d As Variant)
doubleMe = d * 2
End Function
Você também pode usar Application.Volatile
, mas tem a desvantagem de tornar a sua UDF sempre recalcular - mesmo quando ele não precisa, porque os dados referenciados não foi alterado.
Public Function doubleMe()
Application.Volatile
doubleMe = Worksheets("Fred").Range("A1") * 2
End Function
Para alternar para modo Automático:
Application.Calculation = xlCalculationAutomatic
Para alternar para o Manual:
Application.Calculation = xlCalculationManual
O Application.Volatile
não funciona para recalcular uma fórmula com a minha própria função dentro.Eu uso a seguinte função:Application.CalculateFull
Isso atualiza o cálculo do melhor 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