Domanda

Qualcuno sa come posso far sì che una funzione definita dall'utente si rivaluti (in base ai dati modificati nel foglio di calcolo)?ho provato F9 E Spostare+F9, ma quelli non funzionano.L'unica cosa che sembra funzionare è modificare la cella con la chiamata alla funzione e quindi premere Invio.Qualche idea?Mi sembra di ricordare di essere riuscito a farlo...

È stato utile?

Soluzione

Dovresti usare Application.Volatile nella parte superiore della tua funzione:

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

Verrà quindi rivalutata ogni volta che la cartella di lavoro cambia (se il calcolo è impostato su automatico).

Altri suggerimenti

Qualche informazione in più sulle scorciatoie da tastiera F9 per il calcolo in Excel

  • F9 Ricalcola tutti i fogli di lavoro in tutte le cartelle di lavoro aperte
  • Spostare+ F9 Ricalcola il foglio di lavoro attivo
  • Ctrl+Alt+ F9 Ricalcola tutti i fogli di lavoro in tutte le cartelle di lavoro aperte (ricalcolo completo)
  • Spostare + Ctrl+Alt+ F9 Ricostruisce l'albero delle dipendenze ed esegue un ricalcolo completo

Ok, questo l'ho trovato io stesso.Puoi usare Ctrl+Alt+F9 per realizzare questo.

Se includi TUTTI i riferimenti ai dati del foglio di calcolo nell'elenco dei parametri UDF, Excel ricalcolerà la tua funzione ogni volta che i dati a cui si fa riferimento cambiano:

Public Function doubleMe(d As Variant)
    doubleMe = d * 2
End Function

Puoi anche usare Application.Volatile, ma questo ha lo svantaggio di far sì che la tua UDF venga sempre ricalcolata, anche quando non è necessario perché i dati di riferimento non sono cambiati.

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

Per passare alla modalità automatica:

Application.Calculation = xlCalculationAutomatic    

Per passare alla modalità Manuale:

Application.Calculation = xlCalculationManual    

IL Application.Volatile non funziona per ricalcolare una formula con la mia funzione all'interno.Utilizzo la seguente funzione:Application.CalculateFull

Questo aggiorna il calcolo meglio di 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top