Wie kann ich eine benutzerdefinierte Funktion veranlassen, sich basierend auf geänderten Daten in der Tabelle neu zu bewerten?
Ich habe versucht F9und Shift+F9 .
Das einzige, was zu funktionieren scheint, ist, die Zelle mit dem Funktionsaufruf zu bearbeiten und dann die Eingabetaste zu drücken.
excel
vba
user-defined-functions
Brian Sullivan
quelle
quelle
Application.Volatile True
. H.Weitere Informationen zu den F9-Tastaturkürzeln für die Berechnung in Excel
quelle
Okay, habe diesen selbst gefunden. Sie können Ctrl+ Alt+ verwenden F9, um dies zu erreichen.
quelle
Application.Volatile
Methode in Office 2010 hinzugefügt wurde.Wenn Sie ALLE Verweise auf die Tabellenkalkulationsdaten in die UDF-Parameterliste aufnehmen, berechnet Excel Ihre Funktion 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
quelle
So wechseln Sie zu Automatisch:
So wechseln Sie zu Manuell:
quelle
Das
Application.Volatile
funktioniert nicht zum Neuberechnen einer Formel mit meiner eigenen Funktion. Ich benutze die folgende Funktion:Application.CalculateFull
quelle
Dies aktualisiert die Berechnung besser 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
quelle
Ich fand es am besten, die Berechnung nur zu aktualisieren, wenn eine bestimmte Zelle geändert wird. Hier ist ein Beispiel für einen VBA-Code, der in das Ereignis "Arbeitsblatt" "Ändern" eingefügt werden soll:
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("F3")) Is Nothing Then Application.CalculateFull End If End Sub
quelle
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
quelle