Aktualisieren Sie die Ergebnisse der Excel VBA-Funktion
-
08-06-2019 - |
Frage
Weiß jemand, wie ich eine benutzerdefinierte Funktion dazu bringen kann, sich selbst neu auszuwerten (basierend auf geänderten Daten in der Tabelle)?ich habe es versucht F9 Und Schicht+F9, aber die funktionieren nicht.Das Einzige, was zu funktionieren scheint, ist, die Zelle mit dem Funktionsaufruf zu bearbeiten und dann die Eingabetaste zu drücken.Irgendwelche Ideen?Ich scheine mich zu erinnern, dass ich das geschafft habe ...
Lösung
Du solltest benutzen Application.Volatile
oben in Ihrer Funktion:
Function doubleMe(d)
Application.Volatile
doubleMe = d * 2
End Function
Bei jeder Änderung der Arbeitsmappe wird die Berechnung dann neu ausgewertet (wenn Ihre Berechnung auf „Automatisch“ eingestellt ist).
Andere Tipps
Weitere Informationen zu den F9-Tastaturkürzeln für Berechnungen in Excel
- F9 Berechnet alle Arbeitsblätter in allen geöffneten Arbeitsmappen neu
- Schicht+ F9 Berechnet das aktive Arbeitsblatt neu
- Strg+Alt+ F9 Berechnet alle Arbeitsblätter in allen geöffneten Arbeitsmappen neu (vollständige Neuberechnung)
- Schicht + Strg+Alt+ F9 Erstellt den Abhängigkeitsbaum neu und führt eine vollständige Neuberechnung durch
Okay, das habe ich selbst gefunden.Sie können verwenden Strg+Alt+F9 um das zu erreichen.
Wenn Sie ALLE Verweise auf die Tabellendaten in die UDF-Parameterliste aufnehmen, berechnet Excel Ihre Funktion immer dann neu, wenn sich die referenzierten Daten ändern:
Public Function doubleMe(d As Variant)
doubleMe = d * 2
End Function
Sie können auch verwenden Application.Volatile
, Dies hat jedoch den Nachteil, dass Ihre UDF immer neu berechnet wird – auch wenn dies nicht erforderlich ist, da sich die referenzierten Daten nicht geändert haben.
Public Function doubleMe()
Application.Volatile
doubleMe = Worksheets("Fred").Range("A1") * 2
End Function
So wechseln Sie zu „Automatisch“:
Application.Calculation = xlCalculationAutomatic
So wechseln Sie zu „Manuell“:
Application.Calculation = xlCalculationManual
Der Application.Volatile
funktioniert nicht für die Neuberechnung einer Formel mit meiner eigenen Funktion darin.Ich verwende folgende Funktion:Application.CalculateFull
Dadurch wird die Berechnung besser aktualisiert als 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