1. 程式人生 > >如何在 VBA 中執行 Excel Add-in 中的程式碼

如何在 VBA 中執行 Excel Add-in 中的程式碼

Excel Add-in 指使用 VBA 編寫並且儲存在 xlam 檔案中的載入項(也經常被稱作載入巨集)。將 VBA 程式碼分散在各個 Excel 檔案中不利於程式碼的管理,微軟新的載入項編寫技術 Web Add-in 也是希望程式碼的部署由分散到集中。用 VBA 編寫的程式碼,如果存放在 Excel Add-in 中,也能實現一定程度的集中。

那麼,放在 xlam 的程式碼,其他的工作薄在 VBA 中如何呼叫其中的程式碼呢?本文做一個簡單的說明。

新建一個工作簿,另存為 xlam (Excel 載入巨集) 格式。Excel 對於載入巨集,會預設一個儲存位置,您可以手工改變儲存的位置。儲存在預設位置的載入巨集,在 Excel Ribbon 選單項的 開發者工具

-> 載入項 將自動出現;不在預設位置的載入巨集,需要通過瀏覽按鈕來選擇。

開啟 StoneUtils.xlam,在開啟狀態下,沒有工作表,所以介面看起來是空的。通過快捷鍵 Alt + F11 進入 VBE 環境,插入一個模組,將模組命名為 TestModule。在 TestModule 中編寫如下程式碼:

Public Function About() As String
    About = "Developed by Stone " & VBA.vbCrLf & " Version 1.0, 2018"
End Function

顯示一條資訊。

關閉載入項檔案,另外開啟一個 Excel 工作簿。通過 開發者工具

-> 載入項,選中 StoneUtils 載入巨集:

進入 VBE 環境,我們可以看到,在左邊的工程資料夾中,開啟的工作表和 StoneUtils 的工程都叫 VBAProject,這可不好區分,我們需要將 StoneUtils 的 VBA Project 改一個名字。

接下來在 VBE 中新增對 StoneUtils 的引用:

然後在工作簿1中編寫測試子例程如下:

Public Sub test_about_info()
    Dim info As String
    info = StoneUtils.TestModule.About()
    Debug.Print
info End Sub

執行,在立即視窗中打印出如下資訊:

第二種方法,使用 Application.run():

Public Sub test_about_info_method2()
    Dim info As String
    Dim addinPath As String
    addinPath = Application.UserLibraryPath
    info = Application.Run("'" & addinPath & "StoneUtils.xlam'!About")
    Debug.Print info
End Sub

注意,工作簿檔案需要用單引號包圍(定界符)。第二種方法不侷限於 xlam 檔案,普通的 xlam 檔案也可以。