Excel-UDFs: Zellen ändern, ohne Arrays zurückzugeben
Eine der Einschränkungen benutzerdefinierter Funktionen (UDFs) in Excel ist ihre Unfähigkeit, dies zu tun Zellen oder Arbeitsmappeneigenschaften direkt ändern. Es gibt jedoch eine, wenn auch komplexe, Problemumgehung, die es UDFs ermöglicht, Zellmodifikationen durchzuführen.
Verwendung von Windows- und Anwendungstimern zur Umgehung von UDF-Einschränkungen
Zum Modifizieren von Zellen innerhalb von a Zum Einsatz kommt UDF, eine clevere Kombination aus Windows-Timern und Application.OnTime-Timern. Der Windows-Timer initiiert einen Application.OnTime-Timer, der Code sicher ausführt, wenn Excel Zelländerungen zulässt.
Implementierung
Die UDF ruft die Windows-Timerroutine auf, die eine plant Application.OnTime-Timer mit einem bestimmten Zeitparameter. Die Application.OnTime-Routine führt dann Code aus, der nicht innerhalb der UDF selbst ausgeführt werden kann.
Beispielcode
Der folgende Code zeigt, wie diese Problemumgehung implementiert wird:
Public Function AddTwoNumbers(ByVal Value1 As Double, ByVal Value2 As Double) As Double AddTwoNumbers = Value1 + Value2 ' Schedule the Windows timer mWindowsTimerID = SetTimer(0&, 0&, 1, AddressOf AfterUDFRoutine1) End Function Public Sub AfterUDFRoutine1() ' Schedule the Application.OnTime timer mApplicationTimerTime = Now Application.OnTime mApplicationTimerTime, "AfterUDFRoutine2" End Sub Public Sub AfterUDFRoutine2() ' Perform modifications outside the UDF '... End Sub
Vorbehalte
Diese Problemumgehung ist nicht ohne Einschränkungen. UDFs, die es verwenden, sollten nicht flüchtig sein, keine flüchtigen Funktionen übergeben oder auf Zellen verweisen, die flüchtige Formeln/Funktionen enthalten. Darüber hinaus werden Zelländerungen nur dann vorgenommen, wenn der Timer in einer sicheren Umgebung ausgelöst wird (keine offenen Dialoge oder Zellbearbeitung).
Das obige ist der detaillierte Inhalt vonKönnen Excel-UDFs Zellen ändern, ohne Arrays zurückzugeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!