HOW TO:公開程式碼給 Visual Basic 專案中的 VBA

如果您想讓 Visual Basic 專案中的程式碼和 Visual Basic for Applications (VBA) 程式碼彼此互動,可以將專案中的程式碼公開 (Expose) 給 Visual Basic for Applications (VBA) 程式碼。

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

Visual Basic 程序與 Visual C# 程序不同。 如需詳細資訊,請參閱在文件層級自訂中呼叫 VBA 的程式碼HOW TO:公開程式碼給 Visual C# 專案中的 VBA

主項目類別 (Class) 中程式碼採用的程序,與其他類別中程式碼採用的程序不同:

  • 公開主項目類別中的程式碼

  • 公開不在主項目類別中的程式碼

視訊的連結 如需觀看相關示範影片,請參閱如何:從 VBA 呼叫 VSTO 程式碼?(英文)。

公開主項目類別中的程式碼

若要讓 VBA 程式碼呼叫主項目類別中的 Visual Basic 程式碼,請將主項目的 [EnableVbaCallers] 屬性設定為 [True]。

如需示範如何公開主項目類別方法然後從 VBA 加以呼叫的逐步解說,請參閱逐步解說:在 Visual Basic 專案中呼叫 VBA 的程式碼。 如需主項目的詳細資訊,請參閱主項目和主控制項概觀

若要將主項目中的程式碼公開給 VBA

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

    如需支援巨集的文件檔案格式之詳細資訊,請參閱在文件層級自訂中呼叫 VBA 的程式碼

    注意事項注意事項

    這項功能不適用於 Word 範本專案。

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

  3. 將想要公開給 VBA 的屬性、方法或事件加入至專案中的其中一個主項目類別,並將新成員宣告為 Public。 類別名稱是取決於應用程式:

    • 在 Word 專案中,主項目類別預設會命名為 ThisDocument。

    • 在 Excel 專案中,主項目類別預設會命名為 ThisWorkbook、Sheet1、Sheet2 和 Sheet3。

  4. 將主項目的 [EnableVbaCallers] 屬性設定為 [True]。 在設計工具中開啟主項目時,這個屬性就會出現在 [屬性] 視窗中。

    設定這個屬性之後,Visual Studio 會自動將 [ReferenceAssemblyFromVbaProject] 屬性設定為 True。 如需這個屬性的詳細資訊,請參閱在文件層級自訂中呼叫 VBA 的程式碼

    注意事項注意事項

    如果活頁簿或文件尚未包含 VBA 程式碼,或文件中的 VBA 程式碼未受到信任無法執行,則會在將 [EnableVbaCallers] 屬性設定為 [True] 時接收到錯誤訊息。 這是因為在這個情況下,Visual Studio 無法修改文件中的 VBA 專案。

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

    此時,Visual Studio 會設定專案,讓 VBA 專案可以呼叫組件。 Visual Studio 也會將名為 CallVSTOAssembly 的屬性加入至 VBA 專案中的 ThisDocument、ThisWorkbook、Sheet1、Sheet2 或 Sheet3 模組。 您可以使用這個屬性存取已公開至 VBA 的類別公用成員。 如需詳細資訊,請參閱在文件層級自訂中呼叫 VBA 的程式碼

  6. 建置專案。

公開不在主項目類別中的程式碼

若要讓 VBA 程式碼呼叫不在主項目類別中的 Visual Basic 程式碼,請修改程式碼,讓 VBA 可以看到程式碼。

若要將不在主項目類別中的程式碼公開給 VBA

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

    如需支援巨集的文件檔案格式之詳細資訊,請參閱在文件層級自訂中呼叫 VBA 的程式碼

    注意事項注意事項

    這項功能不適用於 Word 範本專案。

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

  3. 將想要公開給 VBA 的成員加入至專案的公用 (Public) 類別,並將新成員宣告為 public。

  4. 將下列 ComVisibleAttributeComClassAttribute 屬性套用至要公開給 VBA 的類別。 這些屬性讓 VBA 可以看到這個類別。

    <Microsoft.VisualBasic.ComClass()> _
    <System.Runtime.InteropServices.ComVisibleAttribute(True)> _
    
  5. 覆寫專案裡主項目類別的 GetAutomationObject 方法,以傳回要公開給 VBA 的類別執行個體 (Instance)。 下列程式碼範例假設您要將 DocumentUtilities 類別公開給 VBA。

    Protected Overrides Function GetAutomationObject() As Object
        Return New DocumentUtilities()
    End Function
    
  6. 在 Visual Studio 中,開啟文件 (Word) 或工作表 (Excel) 設計工具。

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

    注意事項注意事項

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

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

    此時,Visual Studio 會設定專案,讓 VBA 專案可以呼叫組件。 Visual Studio 也會將名為 GetManagedClass 的方法加入至 VBA 專案。 您可以從 VBA 專案的任何位置呼叫這個方法,以存取公開給 VBA 的類別。 如需詳細資訊,請參閱在文件層級自訂中呼叫 VBA 的程式碼

  9. 建置專案。

請參閱

工作

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

逐步解說:在 Visual Basic 專案中呼叫 VBA 的程式碼

HOW TO:公開程式碼給 Visual C# 專案中的 VBA

概念

在文件層級自訂中呼叫 VBA 的程式碼

其他資源

設計和建立 Office 方案

合併 VBA 和文件層級自訂