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

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top