逐步解說:從 VBA 呼叫 VSTO 載入宏中的程序代碼

本逐步解說示範如何將 VSTO 增益集中的物件公開給其他 Microsoft Office 方案,包含 Visual Basic for Applications (VBA) 和 COM VSTO 增益集。

適用於: 本主題中的資訊適用於 VSTO 載入宏專案。 如需詳細資訊,請參閱 Office 應用程式 lication 和項目類型所提供的功能。

雖然本逐步解說特別使用 Excel,但是所示範的概念卻同樣適用於 Visual Studio 所提供的任何 VSTO 增益集專案範本。

本逐步解說將說明下列工作:

  • 定義可以公開給其他 Office 方案的類別。

  • 將類別公開給其他 Office 方案。

  • 從 VBA 程式碼呼叫類別的方法。

    注意

    在下列指示的某些 Visual Studio 使用者介面項目中,您的電腦可能會顯示不同的名稱或位置: 您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。 如需詳細資訊,請參閱將 IDE 個人化

必要條件

您需要下列元件才能完成這個逐步解說:

建立 VSTO 載入宏專案

第一步是建立 Excel 的 VSTO 增益集專案。

建立新的專案

  1. 使用 Excel VSTO 增益集專案範本建立名為 ExcelImportData的 Excel VSTO 增益集專案。 如需詳細資訊,請參閱 How to: Create Office Projects in Visual Studio

    Visual Studio 會開啟 ThisAddIn.csThisAddIn.vb 程式代碼檔案,並將 ExcelImportData 專案新增方案總管

定義您可以公開給其他 Office 解決方案的類別

本逐步解說的目的是為了從 VBA 程式碼在您的 VSTO 增益集中呼叫 ImportData 類別的 AddInUtilities 方法。 這個方法會將字串寫入至使用中工作表的儲存格 A1。

若要將 AddInUtilities 類別公開給其他 Office 方案,您必須使該類別成為公用類別,且為 COM 可見。 您也必須公開類別中的 IDispatch 介面。 下列程序中的程式碼會示範符合這些需求的其中一種方式。 如需詳細資訊,請參閱 Calling Code in VSTO Add-ins from Other Office Solutions

定義可以公開給其他 Office 方案的類別

  1. 在 [專案] 功能表上,按一下 [加入類別]

  2. 在 [加入新項目] 對話方塊中,將新類別的名稱變更為 AddInUtilities,然後按一下 [加入]

    AddInUtilities.csAddInUtilities.vb 檔案隨即在 [程式碼編輯器] 中開啟。

  3. 將下列指示詞新增至檔案頂端。

    using System.Data;
    using System.Runtime.InteropServices;
    using Excel = Microsoft.Office.Interop.Excel;
    
  4. 使用下列程式碼取代 AddInUtilities 類別。

    [ComVisible(true)]
    public interface IAddInUtilities
    {
        void ImportData();
    }
    
    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    public class AddInUtilities : IAddInUtilities
    {
        // This method tries to write a string to cell A1 in the active worksheet.
        public void ImportData()
        {
            Excel.Worksheet activeWorksheet = Globals.ThisAddIn.Application.ActiveSheet as Excel.Worksheet;
    
            if (activeWorksheet != null)
            {
                Excel.Range range1 = activeWorksheet.get_Range("A1", System.Type.Missing);
                range1.Value2 = "This is my data";
            }
        }
    }
    

    這個程式碼讓 AddInUtilities 類別為 COM 可見,並將 ImportData 方法加入這個類別。 為了公開 IDispatch 介面, AddInUtilities 類別也會具有 ClassInterfaceAttribute 屬性,並實作為 COM 可見的介面。

將類別公開給其他 Office 解決方案

若要將 AddInUtilities 類別公開給其他 Office 方案,請覆寫 RequestComAddInAutomationService 類別中的 ThisAddIn 方法。 在您的覆寫中,傳回 AddInUtilities 類別的執行個體。

將 AddInUtilities 類別公開給其他 Office 方案

  1. 展開 [方案總管] 中的 [Excel]

  2. 以滑鼠右鍵按一下 ThisAddIn.csThisAddIn.vb,然後按一下 [檢視程式碼]。

  3. 將下列程式碼加入 ThisAddIn 類別。

    private AddInUtilities utilities;
    
    protected override object RequestComAddInAutomationService()
    {
        if (utilities == null)
            utilities = new AddInUtilities();
    
        return utilities;
    }
    
  4. 在 [建置] 功能表上,按一下 [建置方案]。

    確認方案建置無誤。

測試 VSTO 載入宏

您可以從多種不同類型的 Office 方案呼叫 AddInUtilities 類別。 在本逐步解說中,您會在 Excel 活頁簿中使用 VBA 程式碼。 如需您也可以使用之其他類型的 Office 解決方案的詳細資訊,請參閱 從其他 Office 解決方案呼叫 VSTO 載入宏中的程式代碼。

測試 VSTO 增益集

  1. F5 執行您的專案。

  2. 在 Excel 中,將現用活頁簿儲存為「Excel 啟用巨集的活頁簿」 (*.xlsm)。 將它儲存在方便取用的位置,例如桌面。

  3. 按一下 [功能區] 上的 [開發人員] 索引標籤。

    注意

    如果 [開發人員] 索引標籤沒有顯示,您必須先使其顯示。 如需詳細資訊,請參閱 如何:在功能區上顯示開發人員索引標籤。

  4. 在 [程式碼] 群組中,按一下 [Visual Basic]

    [Visual Basic 編輯器] 隨即開啟。

  5. 按兩下 [專案] 視窗中的 [ThisWorkbook]

    ThisWorkbook 物件的程式碼檔隨即開啟。

  6. 將下列 VBA 程式碼加入程式碼檔案。 此程式代碼會先取得 COMAddIn 物件,此物件代表 ExcelImportData VSTO 載入宏。 然後,程式代碼會使用 COMAddIn 物件的 Object 屬性來呼叫 ImportData 方法。

    Sub CallVSTOMethod()
        Dim addIn As COMAddIn
        Dim automationObject As Object
        Set addIn = Application.COMAddIns("ExcelImportData")
        Set automationObject = addIn.Object
        automationObject.ImportData
    End Sub
    
  7. 請按 F5

  8. 請確認新的 Imported Data 工作表是否已加入至活頁簿。 此外,請確認儲存格 A1 是否包含字串 This is my data

  9. 結束 Excel。

下一步

您可以從下列主題進一步了解 VSTO 增益集的程式設計: