[Office開發系列] 在 Excel 的儲存格中使用 Managed Code Library 的函式

[Office開發系列] 在 Excel 的儲存格中使用 Managed Code Library 的函式

Excel 最令人印象深刻同時也是經常使用的功能之一,大概就是公式 (formula) 了吧,Excel 內建了許多在不同情況下執行計算的公式,有助於在 Excel 試算表中處理資料。不過很少聽到有人在 Excel 中擴充公式的案例,早期 Microsoft 並沒有開放讓外界可以擴充 Excel 公式的方法,直到 Office 2003 時才開始釋出了可以在 Excel 中擴充公式的方法,Microsoft 將使用者自己擴充 Excel 公式的函式,稱為 UDF (user defined function),並且也展示了由 VBA 開發 UDF 的方法

VBA 可以,當然 Managed Code 也可以囉,我們在前一篇文章中簡單的展示了 VBA 呼叫 Managed Code 函式的方法,本文我們就來將這個函式變成可以直接在 Excel 呼叫的公式吧。

首先,請依前一篇文章的說明,建立好 Managed Code Library。

接著,請在 ThisWorkbook 的程式碼中,加入處理 Open 事件的指令碼:

Private Sub Workbook_Open()

    Me.Application.Run "RegisterCallback", New ExcelFunctions.Example

End Sub

然後,請在 VBA 專案中加入一個新的模組 (Module):

image

 

並且加入下列程式碼:

Dim myManagedObject As Object

Public Sub RegisterCallback(callback As Object)

    Set myManagedObject = callback

End Sub

Public Function AddCS(ByVal A As Double, ByVal B As Double) As Double

    AddCS = myManagedObject.AddCS(A, B)

End Function

 

前面的兩支程式是用來回應在 ThisWorkbok.Open 常式中,針對應用程式登錄的 UDF 入口 (即 RegisterCallback() ) 做回應的函式,而 AddCS() 就是可以用在儲存格的公式宣告,而它會呼叫 Managed Code Library 中的 Example.AddCS() 方法。

接著將它存檔 (XSLM 檔案),關閉該活頁簿檔案後再開啟,然後啟用巨集,在儲存格中輸入 =Add 時,Excel 就會顯示在 VBA 中宣告的 AddCS 公式:

image

而且它也擁有所有公式都有的特性,可以支援拖放的公式變動:

image

 

 

 

參考資料:
How to create Excel UDFs in VSTO managed code

PS: 本文中的範例可以運行於 Office 2007, Office 2010,Office 2003 未測試。