Share via


逐步解說:在應用程式層級增益集中呼叫 VBA 的程式碼

本逐步解說示範如何將應用程式層級增益集 (Add-In) 中的物件公開 (Expose) 給其他 Microsoft Office 方案,包含 Visual Basic for Applications (VBA) 和 COM 增益集。

**適用於:**本主題中的資訊適用於 Microsoft Office 2010 和 2007 Microsoft Office system 的應用程式層級專案。 如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能

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

這個逐步解說將說明下列工作:

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

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

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

注意事項注意事項

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

必要條件

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

-

包含 Microsoft Office 開發者工具的 Visual Studio 2010 版本。 如需詳細資訊,請參閱[設定電腦以開發 Office 方案](bb398242\(v=vs.100\).md)。
  • Excel 2007 或 Excel 2010。

視訊的連結 如需觀看本主題的影片版本,請參閱影片 HOW TO:從 VBA 呼叫應用程式層級增益集中的程式碼 (英文)。

建立增益集專案

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

若要建立新的專案

  • 使用 [Excel 增益集] 專案範本建立名為 ExcelImportData 的 Excel 增益集專案。 如需詳細資訊,請參閱 HOW TO:在 Visual Studio 中建立 Office 專案

    Visual Studio 會開啟 ThisAddIn.cs 或 ThisAddIn.vb 程式碼檔,並將 ExcelImportData 專案加入至 [方案總管]。

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

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

若要將 AddInUtilities 類別公開給其他 Office 方案,您必須使該類別成為公用 (Public) 類別而且讓 COM 看得見它。 怹也必須公開類別中的 IDispatch 介面。 下列程序中的程式碼會示範符合這些需求的其中一種方式。 如需詳細資訊,請參閱 在應用程式層級增益集中呼叫其他 Office 方案的程式碼

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

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

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

    AddInUtilities.cs 或 AddInUtilities.vb 檔案隨即會在程式碼編輯器中開啟。

  3. 將下列陳述式加入至檔案的最上方。

    Imports System.Data
    Imports System.Runtime.InteropServices
    Imports Excel = Microsoft.Office.Interop.Excel
    
    using System.Data;
    using System.Runtime.InteropServices;
    using Excel = Microsoft.Office.Interop.Excel;
    
  4. 將 AddInUtilities 類別替換成下列程式碼。

    <ComVisible(True)> _
    Public Interface IAddInUtilities
        Sub ImportData()
    End Interface
    
    <ComVisible(True)> _
    <ClassInterface(ClassInterfaceType.None)> _
    Public Class AddInUtilities
        Implements IAddInUtilities
    
        ' This method tries to write a string to cell A1 in the active worksheet.
        Public Sub ImportData() Implements IAddInUtilities.ImportData
    
            Dim activeWorksheet As Excel.Worksheet = Globals.ThisAddIn.Application.ActiveSheet
    
            If activeWorksheet IsNot Nothing Then
                Dim range1 As Excel.Range = activeWorksheet.Range("A1")
                range1.Value2 = "This is my data"
            End If
        End Sub
    End Class
    
    [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";
            }
        }
    }
    

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

將類別公開給其他 Office 方案

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

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

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

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

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

    Private utilities As AddInUtilities
    
    Protected Overrides Function RequestComAddInAutomationService() As Object
        If utilities Is Nothing Then
            utilities = New AddInUtilities()
        End If
        Return utilities
    End Function
    
    private AddInUtilities utilities;
    
    protected override object RequestComAddInAutomationService()
    {
        if (utilities == null)
            utilities = new AddInUtilities();
    
        return utilities;
    }
    
  4. 在 [建置] 功能表上,按一下 [建置方案]。

    接著驗證方案建置無誤。

測試增益集

您可以從多種不同類型的 Office 方案呼叫 AddInUtilities 類別。 在本逐步解說中,您會在 Excel 活頁簿中使用 VBA 程式碼。 如需還也可以使用之其他 Office 方案類型的詳細資訊,請參閱在應用程式層級增益集中呼叫其他 Office 方案的程式碼

若要測試增益集

  1. 請按 F5 執行您的專案。

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

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

    注意事項注意事項

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

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

    Visual Basic 編輯器隨即開啟。

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

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

  6. 將下列 VBA 程式碼加入至程式碼檔案。 這個程式碼會先取得 COMAddIn 物件,該物件代表 ExcelImportData 增益集。 接著,程式碼會使用 COMAddIn 物件的 Object 屬性 (Property) 來呼叫 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。

後續步驟

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

請參閱

工作

HOW TO:在 Visual Studio 中建立 Office 專案

概念

在應用程式層級增益集中呼叫其他 Office 方案的程式碼

使用擴充性介面自訂 UI 功能

應用程式層級增益集的架構

其他資源

應用程式層級增益集程式設計

開發 Office 方案