建立修改其他儲存格而不傳回數組的UDF
您有一個Excel 加載項,其中包含一個名為New_Years 的函數,該函數目前傳回兩個指定年份之間的元旦數組。但是,這需要您選擇多個儲存格並使用 Ctrl Shift Enter 建立陣列。
是否可以避免陣列建立?
是的,可以直接從 UDF 修改其他儲存格而不傳回陣列。雖然 Excel 禁止 UDF 對單元格屬性進行任何更改,但有一個複雜的解決方案,涉及使用 Windows 計時器和 Application.OnTime 計時器的組合。
解決方案概述
程式碼實作
以下程式碼必須放在一般模組:
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
計時器程式
計時器程式定義了兩個定時器程式:AfterUDFRoutine1 和AfterUDFRoutine2。它們處理 UDF 外部程式碼的調度和執行。
用法範例在Excel 工作表的儲存格中輸入AddTwoNumbers 函數:=AddTwoNumbers(A1, B1)這將啟動計時器
以上是您可以在不傳回 Excel 中的陣列的情況下修改 UDF 中的儲存格嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!