共用方式為


公開程式碼給 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

  1. 開啟或建立以 Word 文件、Excel 活頁簿或支援巨集的 Excel 範本為基礎的文件層級專案專案,以及已經包含 VBA 程式碼的文件層級專案。

    如需支援巨集的文件檔案格式之詳細資訊,請參閱合併 VBA和文件層級自訂

    注意

    這項功能無法用於 Word 範本專案。

  2. 確保允許文件中的 VBA 程式碼執行,而不提示使用者啟用巨集。 您可以將 Office 專案的位置加入 Word 或 Excel 信任中心設定的信任位置清單,以信任 VBA 程式碼執行。

  3. 將您想要公開給 VBA 的成員新增至專案中的公用類別,並將新成員宣告為 public

  4. 將下列 ComVisibleAttributeClassInterfaceAttribute 屬性套用至您要公開給 VBA 的類別。 這些屬性可以讓 COM 看到類別,但是不會產生類別介面。

    [System.Runtime.InteropServices.ComVisible(true)]
    [System.Runtime.InteropServices.ClassInterface(
        System.Runtime.InteropServices.ClassInterfaceType.None)]
    
  5. 覆寫專案中之主項目類別的 GetAutomationObject 方法,傳回您正在公開給 VBA 之類別的執行個體:

    • 如果要將主項目類別公開給 VBA,請覆寫屬於此類別的 GetAutomationObject 方法,並傳回該類別的目前執行個體。

      protected override object GetAutomationObject()
      {
          return this;
      }
      
    • 如果要公開給 VBA 的不是主項目的類別,請覆寫專案中任何主項目的 GetAutomationObject 方法,並返回非主項目類別的執行個體。 例如,以下程式碼假設您將名為 DocumentUtilities 的類別公開給 VBA。

      protected override object GetAutomationObject()
      {
          return new DocumentUtilities();
      }
      

      如需主項目的詳細資訊,請參閱主項目和主控制項概觀

  6. 從您要公開給 VBA 的類別擷取介面。 在 [擷取介面] 對話方塊中,選取要包含在介面宣告中的公用成員。 如需詳細資訊,請參閱擷取介面重構

  7. public 關鍵字新增至介面宣告。

  8. 將下列 ComVisibleAttribute 屬性新增至介面,讓 COM 能夠看見介面。

    [System.Runtime.InteropServices.ComVisible(true)]
    
  9. 在 Visual Studio 的設計工具中開啟文件 (對於 Word) 或活頁簿 (對於 Excel)。

  10. 在 [屬性] 視窗中,選取 ReferenceAssemblyFromVbaProject 屬性,然後將值變更為 [True]

    注意

    如果活頁簿或文件尚未包含 VBA 程式碼,或文件中的 VBA 程式碼不受信任而無法執行,當您將 ReferenceAssemblyFromVbaProject 屬性設為 True 時會收到錯誤訊息。 這是因為在這種情況中,Visual Studio 無法修改文件中的 VBA 專案。

  11. 按一下訊息中顯示的 [確定] 。 此訊息會提醒您,如果在從 Visual Studio 執行專案時將 VBA 程式碼新增至活頁簿或文件,則下次建立專案時 VBA 程式碼將會遺失。 這是因為每次建立專案時,都會覆寫建立資料夾中的文件。

    此時,Visual Studio 會設定專案,讓 VBA專案可以呼叫組件。 Visual Studio 也為 VBA 專案新增一個名為 GetManagedClass 的方法。 您可以從 VBA 專案中的任何位置呼叫這個方法,以存取您公開給 VBA 的類別。

  12. 組建專案。