Excel UDF: Zellen ändern, ohne ein Array zurückzugeben
In Excel geben benutzerdefinierte Funktionen (UDFs) normalerweise Werte oder Arrays zurück. Es gibt jedoch Szenarien, in denen eine UDF andere Zellen ändern muss, ohne ein Array zurückzugeben. Dies kann durch eine komplexe Technik erreicht werden, die Windows-Timer und Application.OnTime-Ereignisse umfasst.
Das Problem:
Stellen Sie sich eine UDF namens New_Years vor, die als Eingabe zwei Jahre benötigt und gibt eine Reihe von Neujahrsdaten zwischen diesen Jahren zurück. Um das Array in Excel zu füllen, muss der Benutzer jedoch manuell Zellen auswählen, die Formel eingeben und Strg-Umschalt-Eingabetaste drücken. Diese Einschränkung verhindert, dass die UDF die Daten automatisch ausfüllt.
Die Lösung:
Trotz der Einschränkung von Excel, dass UDFs Zellen direkt ändern können, gibt es eine Problemumgehung mithilfe von Windows-Timern und -Anwendungen. OnTime Events machen es möglich. Durch Starten eines Windows-Timers aus dem UDF heraus kann ein nachfolgender Application.OnTime-Timer so geplant werden, dass er Aktionen ausführt, die andernfalls in einem UDF verboten wären.
Codebeispiel:
Der folgende Code zeigt, wie diese Technik mithilfe einer Sammlung implementiert wird, um die Referenzen von Zellen zu speichern, in denen die UDF aufgerufen wird. Zwei Timer-Routinen, AfterUDFRoutine1 und AfterUDFRoutine2, werden zur Verarbeitung der Timer-Ereignisse verwendet.
Public Sub AfterUDFRoutine1() ' Stop the Windows timer If mWindowsTimerID <> 0 Then KillTimer 0&, mWindowsTimerID ' Cancel any previous OnTime timers If mApplicationTimerTime <> 0 Then Application.OnTime mApplicationTimerTime, "AfterUDFRoutine2", , False End If ' Schedule timer mApplicationTimerTime = Now Application.OnTime mApplicationTimerTime, "AfterUDFRoutine2" End Sub Public Sub AfterUDFRoutine2() Dim Cell As Range ' ... Do tasks not allowed in a UDF ... End Sub
Verwendung:
Um diese Technik anzuwenden, muss ein UDF (z. B. AddTwoNumbers ) kann innerhalb eines regulären Moduls erstellt werden. Innerhalb der UDF werden die Timer-Routinen gestartet und die Zellreferenz der aufrufenden Zelle in der Collection gespeichert. Die Timer-Routinen ändern anschließend die erforderlichen Zellen außerhalb des UDF-Bereichs.
Durch die Nutzung von Windows-Timern und Application.OnTime-Ereignissen wird es möglich, UDFs zu erstellen, die Zellen ändern, ohne ein Array zurückzugeben. Diese Technik ermöglicht eine stärkere Automatisierung und macht das manuelle Befüllen des Arrays durch den Benutzer überflüssig.
Das obige ist der detaillierte Inhalt vonWie ändere ich Zellen in Excel-UDFs, ohne ein Array zurückzugeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!