公開程式碼給 Visual C# 專案中的 VBA
如果您希望兩種類型的程序碼彼此互動,可以將 Visual C# 專案中的程式碼公開給 Visual Basic for Applications (VBA) 程式碼。
Visual C# 處理序與 Visual Basic 處理序不同。 如需更多資訊,請參閱如何:公開程式碼給 Visual Basic 專案中的 VBA。
適用對象:本主題資訊適用於 Excel 及 Word 的文件層級專案。 如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能。
公開程式碼給 Visual C# 專案
若要讓 VBA 程式碼能夠呼叫 Visual C# 專案中的程式碼,請修改程式碼,讓 COM 可以看到該程式碼,然後在設計工具中將 ReferenceAssemblyFromVbaProject 屬性設定為 [True]。
如需示範如何從 VBA 呼叫 Visual C# 專案中方法的逐步解說,請參閱逐步解說:逐步解說:在 Visual C# 專案中呼叫 VBA 的程式碼。
將 Visual C# 專案中的程式碼公開給 VBA
開啟或建立以 Word 文件、Excel 活頁簿或支援巨集的 Excel 範本為基礎的文件層級專案專案,以及已經包含 VBA 程式碼的文件層級專案。
如需支援巨集的文件檔案格式之詳細資訊,請參閱合併 VBA和文件層級自訂。
注意
這項功能無法用於 Word 範本專案。
確保允許文件中的 VBA 程式碼執行,而不提示使用者啟用巨集。 您可以將 Office 專案的位置加入 Word 或 Excel 信任中心設定的信任位置清單,以信任 VBA 程式碼執行。
將您想要公開給 VBA 的成員新增至專案中的公用類別,並將新成員宣告為 public。
將下列 ComVisibleAttribute 和 ClassInterfaceAttribute 屬性套用至您要公開給 VBA 的類別。 這些屬性可以讓 COM 看到類別,但是不會產生類別介面。
[System.Runtime.InteropServices.ComVisible(true)] [System.Runtime.InteropServices.ClassInterface( System.Runtime.InteropServices.ClassInterfaceType.None)]
覆寫專案中之主項目類別的 GetAutomationObject 方法,傳回您正在公開給 VBA 之類別的執行個體:
如果要將主項目類別公開給 VBA,請覆寫屬於此類別的 GetAutomationObject 方法,並傳回該類別的目前執行個體。
protected override object GetAutomationObject() { return this; }
如果要公開給 VBA 的不是主項目的類別,請覆寫專案中任何主項目的 GetAutomationObject 方法,並返回非主項目類別的執行個體。 例如,以下程式碼假設您將名為
DocumentUtilities
的類別公開給 VBA。protected override object GetAutomationObject() { return new DocumentUtilities(); }
如需主項目的詳細資訊,請參閱主項目和主控制項概觀。
從您要公開給 VBA 的類別擷取介面。 在 [擷取介面] 對話方塊中,選取要包含在介面宣告中的公用成員。 如需詳細資訊,請參閱擷取介面重構。
將 public 關鍵字新增至介面宣告。
將下列 ComVisibleAttribute 屬性新增至介面,讓 COM 能夠看見介面。
[System.Runtime.InteropServices.ComVisible(true)]
在 Visual Studio 的設計工具中開啟文件 (對於 Word) 或活頁簿 (對於 Excel)。
在 [屬性] 視窗中,選取 ReferenceAssemblyFromVbaProject 屬性,然後將值變更為 [True] 。
注意
如果活頁簿或文件尚未包含 VBA 程式碼,或文件中的 VBA 程式碼不受信任而無法執行,當您將 ReferenceAssemblyFromVbaProject 屬性設為 True 時會收到錯誤訊息。 這是因為在這種情況中,Visual Studio 無法修改文件中的 VBA 專案。
按一下訊息中顯示的 [確定] 。 此訊息會提醒您,如果在從 Visual Studio 執行專案時將 VBA 程式碼新增至活頁簿或文件,則下次建立專案時 VBA 程式碼將會遺失。 這是因為每次建立專案時,都會覆寫建立資料夾中的文件。
此時,Visual Studio 會設定專案,讓 VBA專案可以呼叫組件。 Visual Studio 也為 VBA 專案新增一個名為
GetManagedClass
的方法。 您可以從 VBA 專案中的任何位置呼叫這個方法,以存取您公開給 VBA 的類別。組建專案。