更新:2007 年 11 月
| 适用对象 | 
|---|
| 本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。 项目类型 
 Microsoft Office 版本 
 有关更多信息,请参见按应用程序和项目类型提供的功能。 | 
如果想让 Visual Basic 项目中的代码与 Visual Basic for Applications (VBA) 代码相互交互,则可以向后者公开前者。
Visual Basic 进程不同于 Visual C# 进程。有关更多信息,请参见从 VBA 中调用文档级自定义项中的代码和如何:向 VBA 公开 Visual C# 项目中的代码。
用于宿主项类中的代码的过程与用于其他类中的代码的过程不同:
- 公开宿主项类中的代码 
- 公开不在宿主项类中的代码 
公开宿主项类中的代码
为了使 VBA 代码能够调用宿主项类中的 Visual Basic 代码,请将宿主项的“EnableVbaCallers”属性设置为“True”。
有关演示如何公开宿主项类的方法然后从 VBA 中调用该方法的演练,请参见演练:在 Visual Basic 项目中调用 VBA 中的代码。有关宿主项的更多信息,请参见宿主项和宿主控件概述。
向 VBA 公开宿主项中的代码
- 打开或创建一个文档级 Visual Basic 项目,该项目须基于支持宏的 Word 文档、Excel 工作簿或 Excel 模板并且已经包含 VBA 代码。 - 有关支持宏的文档文件格式的更多信息,请参见从 VBA 中调用文档级自定义项中的代码。 .gif) 说明: 说明:- 此功能无法在 Word 模板项目中使用。 
- 确保在不提示用户启用宏的情况下允许运行文档中的 VBA 代码。通过在 Word 或 Excel 的“信任中心”设置中将 Visual Studio Tools for Office 项目的位置添加到受信任位置列表中,可以在运行 VBA 代码时信任该代码。 
- 将要向 VBA 公开的属性、方法或事件添加到项目中的某个宿主项类中,并将新成员声明为 Public。类的名称取决于应用程序: - 在 Word 项目中,宿主项类默认情况下名为 ThisDocument。 
- 在 Excel 项目中,宿主项类默认情况下名为 ThisWorkbook、Sheet1、Sheet2 和 Sheet3。 
 
- 将宿主项的“EnableVbaCallers”属性设置为“True”。当宿主项在设计器中打开时,此属性在“属性”窗口中可用。 - 当您设置了此属性后,Visual Studio Tools for Office 会自动将“ReferenceAssemblyFromVbaProject”属性设置为“True”。有关此属性的更多信息,请参见从 VBA 中调用文档级自定义项中的代码。 .gif) 说明: 说明:- 如果工作簿或文档尚未包含 VBA 代码,或者如果运行文档中的 VBA 代码时不信任该代码,则在将“EnableVbaCallers”属性设置为“True”时将收到一条错误消息。这是因为在这种情况下 Visual Studio Tools for Office 无法修改文档中的 VBA 项目。 
- 在显示的消息中单击“确定”。此消息提醒您在从 Visual Studio 中运行项目时如果将 VBA 代码添加到工作簿或文档中,则在下一次生成该项目时 VBA 代码将丢失。这是因为每次生成项目时都会覆盖生成输出文件夹中的文档。 - 此时,Visual Studio Tools for Office 将配置项目以便 VBA 项目可以调入程序集。Visual Studio Tools for Office 还会向 VBA 项目的 ThisDocument、ThisWorkbook、Sheet1、Sheet2 或 Sheet3 模块中添加一个名为 CallVSTOAssembly 的属性。您可以使用此属性来访问您向 VBA 公开的类的公共成员。有关更多信息,请参见从 VBA 中调用文档级自定义项中的代码。 
- 生成项目。 
公开不在宿主项类中的代码
为了使 VBA 代码能够调用不在宿主项类中的 Visual Basic 代码,请修改代码以使其对于 VBA 可见。
向 VBA 公开不在宿主项类中的代码
- 打开或创建一个文档级 Visual Basic 项目,该项目须基于支持宏的 Word 文档、Excel 工作簿或 Excel 模板并且已经包含 VBA 代码。 - 有关支持宏的文档文件格式的更多信息,请参见从 VBA 中调用文档级自定义项中的代码。 .gif) 说明: 说明:- 此功能无法在 Word 模板项目中使用。 
- 确保在不提示用户启用宏的情况下允许运行文档中的 VBA 代码。通过在 Word 或 Excel 的“信任中心”设置中将 Visual Studio Tools for Office 项目的位置添加到受信任位置列表中,可以在运行 VBA 代码时信任该代码。 
- 将想要向 VBA 公开的成员添加至项目中的公共类,并将新成员声明为 public。 
- 将以下 ComVisibleAttribute 和 ComClassAttribute 属性应用于要向 VBA 公开的类。这些属性使得类对于 VBA 可见。 - <Microsoft.VisualBasic.ComClass()> _ <System.Runtime.InteropServices.ComVisibleAttribute(True)> _
- 重写项目中宿主项类的 GetAutomationObject 方法以返回要向 VBA 公开的类的实例。下面的代码示例假定您向 VBA 公开名为 DocumentUtilities 的类。 - Protected Overrides Function GetAutomationObject() As Object Return New DocumentUtilities() End Function
- 在 Visual Studio 中打开文档(Word 文档)或工作表(Excel 工作表)的设计器。 
- 在“属性”窗口中,选择“ReferenceAssemblyFromVbaProject”属性,并将值更改为“True”。 .gif) 说明: 说明:- 如果工作簿或文档尚未包含 VBA 代码,或者如果运行文档中的 VBA 代码时不信任该代码,则在将“ReferenceAssemblyFromVbaProject”属性设置为“True”时将收到一条错误消息。这是因为在这种情况下 Visual Studio Tools for Office 无法修改文档中的 VBA 项目。 
- 在显示的消息中单击“确定”。此消息提醒您在从 Visual Studio 中运行项目时如果将 VBA 代码添加到工作簿或文档中,则在下一次生成该项目时 VBA 代码将丢失。这是因为每次生成项目时都会覆盖生成输出文件夹中的文档。 - 此时,Visual Studio Tools for Office 将配置项目以便 VBA 项目可以调入程序集。Visual Studio Tools for Office 还会向 VBA 项目添加一个名为 GetManagedClass 的方法。可以从 VBA 项目的任何位置调用此方法以访问向 VBA 公开的类。有关更多信息,请参见从 VBA 中调用文档级自定义项中的代码。 
- 生成项目。 
请参见
任务
如何:创建 Visual Studio Tools for Office 项目
演练:在 Visual Basic 项目中调用 VBA 中的代码