结合 VBA 和文档级自定义项

在属于 Microsoft Office Word 或 Microsoft Office Excel 的文档级自定义项的文档中,可以使用 Visual Basic for Applications (VBA) 代码。 您可以从自定义项程序集调用文档中的 VBA 代码,或者可以配置项目以使文档中的 VBA 代码能够调用自定义项程序集中的代码。 有关后一个任务的更多信息,请参见从 VBA 中调用文档级自定义项中的代码

**适用于:**本主题中的信息适用于以下应用程序的文档级项目:Excel 2007 和 Excel 2010;Word 2007 和 Word 2010。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能

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

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

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

从自定义项程序集中调用 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 变量代替可选参数的信息,请参见在 Office 解决方案中使用 Visual Basic 与 Visual C# 编程的差异

请参见

任务

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

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

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

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

概念

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

比较 VBA 解决方案和 Visual Studio 中的 Office 解决方案

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

其他资源

设计和创建 Office 解决方案