首頁 > 後端開發 > C++ > 如何在 Excel 外掛程式中實現非數組更改 UDF?

如何在 Excel 外掛程式中實現非數組更改 UDF?

Susan Sarandon
發布: 2024-11-16 05:52:03
原創
465 人瀏覽過

How Can Non-Array Changing UDFs be Implemented in Excel Add-Ins?

在 Excel 加載項中實現非數組更改 UDF

在 Excel 加載項中,通常禁止更改單元格值的 UDF。但是,可以使用 Windows 計時器和 Application.OnTime 計時器的組合來繞過此限制。

Windows 計時器限制

Windows 計時器無法在儲存格時執行 VBA 程式碼正在編輯或對話方塊已開啟。此限制阻止它們直接修改 UDF 中的單元格屬性。

解決方案:Application.OnTime Timer

為了規避此限制,在 UDF 中使用 Windows 計時器來安排一個 Application.OnTime 計時器。 Application.OnTime 計時器是安全的,僅在未編輯儲存格且未開啟對話方塊時觸發。

UDF 實作

  1. 建立常規模組: 將下列程式碼放在常規VBA 模組中,而不是UDF 中module.
  2. 將以下程式碼放在常規VBA 模組中,而不是UDF 中module.
  3. UDF 實現(AddTwoNumbers):

    在 AddTwoNumbers UDF 中,照常計算總和。計算後:
    • 將呼叫者的儲存格參考快取在集合中。
    • 設定 Windows 計時器以啟動計時器程式 AfterUDFRoutine1。
  4. 初程式(AfterUDFRoutine1):

    • 停止 Windows 計時器。
    • 為 AfterUDFRoutine2 安排安全的 Application.OnTime 計時器。
  5. 第二個定時器程式(AfterUDFRoutine2):

    • 執行UDF 中不允許的任務,例如修改儲存格值、停用螢幕更新或變更計算模式。

範例用法

Private Sub TestAddTwoNumbers()
    Dim Cell As Range

    Set Cell = Range("A1")

    ' Cache the reference in the UDF
    Cell.Formula = "=AddTwoNumbers(1, 2)"

    ' Trigger the timer routine
    Cell.Calculate
End Sub
登入後複製

計算後,透過將呼叫者旁的儲存格設定為其目前值,單元格公式將變更以反映新值。

以上是如何在 Excel 外掛程式中實現非數組更改 UDF?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板