Aggiorna i risultati della funzione VBA di Excel
-
08-06-2019 - |
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...
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