结合 VBA 和文档级自定义项

更新:2007 年 11 月

适用对象

本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。

项目类型

  • 文档级项目

Microsoft Office 版本

  • 2007 Microsoft Office system

  • Microsoft Office 2003

有关更多信息,请参见按应用程序和项目类型提供的功能

在属于 Microsoft Office Word 或 Microsoft Office Excel Visual Studio Tools for Office 文档级自定义项的文档中,可以使用 Visual Basic for Applications (VBA) 代码。在所有文档级项目中都可以从自定义项程序集中调用文档中的 VBA 代码。在 2007 Microsoft Office system 的文档级项目中,还可以将项目配置为允许文档中的 VBA 代码调用自定义项程序集中的代码。有关更多信息,请参见从 VBA 中调用文档级自定义项中的代码

文档级自定义项中 VBA 代码的行为

当您在 Visual Studio 中打开项目时,文档将以设计模式打开。VBA 代码在文档处于设计模式时不会运行,所以您可以处理文档和代码而不会运行 VBA 代码。

运行解决方案时,VBA 和 Visual Studio Tools for Office 程序集中的事件处理程序都会选取文档中引发的事件,而且两组代码都会运行。您无法预先确定哪个代码将在另一个代码之前运行;您必须在每个单独的情况中通过测试来确定这一点。如果两个代码集没有经过仔细调整和测试,您可能会得到意外的结果。

从自定义项程序集中调用 VBA 代码

您可以在 Word 文档中调用宏,也可以在 Excel 工作簿中调用宏和函数。为此,请使用下列方法之一:

对于每个方法,第一个参数标识要调用的宏或函数的名称,其余的可选参数指定要传递到宏或函数的参数。对于 Word 和 Excel,第一个参数的格式可能不同。

  • 对于 Word,第一个参数是一个字符串,该字符串可以是模板、模块和宏名称的任意组合。如果指定文档名称,则您的代码只能运行与当前上下文相关的文档中的宏 — 而不仅仅是任何文档中的任何宏。

  • 对于 Excel,第一个参数可以是指定宏名称的字符串、指示函数位置的 Range,或者是已注册 DLL (XLL) 函数的寄存器 ID。如果传递字符串,则将在活动工作表的上下文中计算字符串。

下面的代码示例演示如何从 Excel 文档级项目中调用一个名为 MyMacro 的宏。此示例假定 MyMacro 是在 Sheet1 中定义的。

Globals.Sheet1.Application.Run("MyMacro")
Globals.Sheet1.Application.Run("MyMacro", missing, missing, missing,
    missing, missing, missing, missing, missing, missing, missing,
    missing, missing, missing, missing, missing, missing, missing,
    missing, missing, missing, missing, missing, missing, missing, 
    missing, missing, missing, missing, missing, missing);
说明:

有关在 Visual C# 中使用全局 missing 变量代替可选参数的信息,请参见Visual Basic 与 C# 编程比较

请参见

任务

如何:向 VBA 公开 Visual Basic 项目中的代码

如何:向 VBA 公开 Visual C# 项目中的代码

演练:在 Visual Basic 项目中调用 VBA 中的代码

演练:在 Visual C# 项目中调用 VBA 中的代码

概念

从 VBA 中调用文档级自定义项中的代码

在 Visual Studio 中创建 Office 解决方案

比较 VBA 和 Visual Studio Tools for Office 解决方案

Office 解决方案中的程序集概述