逐步解說:在應用程式層級增益集中呼叫 VBA 的程式碼
本逐步解說示範如何將應用程式層級增益集 (Add-In) 中的物件公開 (Expose) 給其他 Microsoft Office 方案,包含 Visual Basic for Applications (VBA) 和 COM 增益集。
**適用於:**本主題中的資訊適用於 Microsoft Office 2013 和 Microsoft Office 2010 的應用程式層級專案。如需詳細資訊,請參閱 依 Office 應用程式和專案類型提供的功能。
雖然本逐步解說特別使用 Excel,但是所示範的概念卻同樣適用於 Visual Studio 所提供的任何增益集專案範本。
這個逐步解說將說明下列工作:
定義可以公開給其他 Office 方案的類別 (Class)。
將類別公開給其他 Office 方案。
從 VBA 程式碼呼叫類別的方法。
![]() |
---|
您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱 Visual Studio 設定。 |
必要條件
您需要下列元件才能完成此逐步解說:
-
包含 Microsoft Office Developer 工具的 Visual Studio 2012 版本。如需詳細資訊,請參閱[設定電腦以開發 Office 方案](bb398242\(v=vs.110\).md)。
- Excel 2013 或 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 方案的類別。
在 [專案] 功能表上按一下 [加入類別]。
在 [加入新項目] 對話方塊中,將新類別的名稱變更為 AddInUtilities,然後按一下 [加入]。
AddInUtilities.cs 或 AddInUtilities.vb 檔案隨即會在程式碼編輯器中開啟。
將下列陳述式加入至檔案的最上方。
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;
將 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 方案
展開 [方案總管] 中的 [ Excel]。
以滑鼠右鍵按一下 [ThisAddIn.cs] 或 [ThisAddIn.vb],然後按一下 [檢視程式碼]。
將下列程式碼加入至 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; }
在 [建置] 功能表上,按一下 [建置方案]。
接著驗證方案建置無誤。
測試增益集
您可以從多種不同類型的 Office 方案呼叫 AddInUtilities 類別。在本逐步解說中,您會在 Excel 活頁簿中使用 VBA 程式碼。如需還也可以使用之其他 Office 方案類型的詳細資訊,請參閱在應用程式層級增益集中呼叫其他 Office 方案的程式碼。
若要測試增益集
請按 F5 執行您的專案。
在 Excel 中,將現用活頁簿儲存為 Excel 啟用巨集的活頁簿 (*.xlsm)。將它儲存在方便取用的位置,如桌面。
按一下 [功能區] 上的 [開發人員] 索引標籤。
注意事項
如果 [開發人員] 索引標籤沒有顯示,您必須先使其顯示。如需詳細資訊,請參閱HOW TO:在功能區顯示開發人員索引標籤。
在 [程式碼] 群組中,按一下 [Visual Basic]。
Visual Basic 編輯器隨即開啟。
按兩下 [專案] 視窗中的 [ThisWorkbook]。
ThisWorkbook 物件的程式碼檔隨即開啟。
將下列 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
按 F5。
驗證新的 Imported Data 工作表是否已加入至活頁簿。此外,驗證儲存格 A1 是否包含字串 This is my data。
結束 Excel。
後續步驟
您可以從下列主題進一步了解增益集的程式設計:
使用 ThisAddIn 類別來自動化主應用程式並執行增益集專案中的其他工作。如需詳細資訊,請參閱應用程式層級增益集程式設計。
在增益集中建立自訂工作窗格。如需詳細資訊,請參閱自訂工作窗格與HOW TO:在應用程式中加入自訂工作窗格。
自訂增益集中的功能區。如需詳細資訊,請參閱功能區概觀與HOW TO:開始自訂功能區。
請參閱
工作
HOW TO:在 Visual Studio 中建立 Office 專案