Heim >Backend-Entwicklung >C++ >Können Sie Zellen aus einer UDF ändern, ohne ein Array in Excel zurückzugeben?
Erstellen einer UDF, die andere Zellen ändert, ohne ein Array zurückzugeben
Sie haben ein Excel-Add-In mit einer Funktion namens New_Years, die derzeit zurückgibt eine Reihe von Neujahrstagen zwischen zwei angegebenen Jahren. Dazu müssen Sie jedoch mehrere Zellen auswählen und die Strg-Umschalt-Eingabetaste verwenden, um das Array zu erstellen.
Ist es möglich, die Array-Erstellung zu vermeiden?
Ja, das ist möglich um andere Zellen direkt aus einer UDF zu ändern, ohne ein Array zurückzugeben. Während Excel UDFs verbietet, Änderungen an Zelleigenschaften vorzunehmen, gibt es eine komplexe Lösung, die die Verwendung einer Kombination aus Windows-Timern und Application.OnTime-Timern beinhaltet.
Lösungsübersicht
Code-Implementierung
Der folgende Code muss eingefügt werden ein reguläres Modul:
Private Declare Function SetTimer Lib "user32" ( _ ByVal HWnd As Long, _ ByVal nIDEvent As Long, _ ByVal uElapse As Long, _ ByVal lpTimerFunc As Long _ ) As Long Private Declare Function KillTimer Lib "user32" ( _ ByVal HWnd As Long, _ ByVal nIDEvent As Long _ ) As Long Private mCalculatedCells As Collection Private mWindowsTimerID As Long Private mApplicationTimerTime As Date Public Function AddTwoNumbers( _ ByVal Value1 As Double, _ ByVal Value2 As Double _ ) As Double AddTwoNumbers = Value1 + Value2 ' Cache the caller's reference for later use in a non-UDF routine If mCalculatedCells Is Nothing Then Set mCalculatedCells = New Collection On Error Resume Next mCalculatedCells.Add Application.Caller, Application.Caller.Address On Error GoTo 0 ' Set the Windows timer If mWindowsTimerID <> 0 Then KillTimer 0&, mWindowsTimerID mWindowsTimerID = SetTimer(0&, 0&, 1, AddressOf AfterUDFRoutine1) End Function
Timer Routinen
Es sind zwei Timer-Routinen definiert: AfterUDFRoutine1 und AfterUDFRoutine2. Sie kümmern sich um die Planung und Ausführung von Code außerhalb der UDF.
Beispielverwendung
Geben Sie in Ihrem Excel-Arbeitsblatt die AddTwoNumbers-Funktion in eine Zelle ein: =AddTwoNumbers(A1, B1)
Dadurch wird der Timer gestartet verarbeiten.
Wichtige Hinweise
Das obige ist der detaillierte Inhalt vonKönnen Sie Zellen aus einer UDF ändern, ohne ein Array in Excel zurückzugeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!