办公室解决方案中的可选参数

Microsoft Office 应用程序的对象模型中的许多方法都接受可选参数。 如果使用 Visual Basic 在 Visual Studio 中开发 Office 解决方案,你不必为可选参数传递值,因为系统会为每个缺少的参数自动使用默认值。 在大多数情况下,还可以在 Visual C# 项目中省略可选参数。 但是,不能在文档级 Word 项目中省略类的ThisDocument可选 ref 参数。

适用于: 本主题中的信息适用于文档级项目和 VSTO 外接程序项目。 请参阅办公室应用程序和项目类型提供的功能。

有关在 Visual C# 和 Visual Basic 项目中使用可选参数的详细信息,请参阅命名参数和可选参数(C# 编程指南)可选参数(Visual Basic)。

注意

在 Visual Studio 的早期版本中,必须为 Visual C# 项目中的每个可选参数传递一个值。 为了方便起见,这些项目包括一个名为 missing 的全局变量,当你想要使用某个可选参数的默认值时,可以将该变量传递给该可选参数。 Visual Studio 中用于办公室的 Visual C# 项目仍包含该missing变量,但在 Visual Studio 2013 中开发办公室解决方案时通常不需要使用它,除非在 Word 文档级项目中的类中ThisDocument调用具有可选 ref 参数的方法。

Excel 中的示例

CheckSpelling 方法具有多个可选参数。 可以为某些参数指定值,并接受其他参数的默认值,如下面的代码示例所示。 此示例需要一个具有名为 Sheet1 的工作表类的文档级项目。


Globals.Sheet1.CheckSpelling(ignoreUppercase: true);

Word 中的示例

Execute 方法具有多个可选参数。 可以为某些参数指定值,并接受其他参数的默认值,如下面的代码示例所示。

Word.Range documentRange = this.Application.ActiveDocument.Content;
documentRange.Find.ClearFormatting();
documentRange.Find.Execute(FindText: "blue", ReplaceWith: "red", Replace: Word.WdReplace.wdReplaceAll);

在适用于 Word 的 Visual C# 文档级项目中的 ThisDocument 类中使用方法的可选参数

Word 对象模型包含许多接受值的可选 ref 参数 Object 的方法。 但是,不能在 Word 的 Visual C# 文档级项目中省略生成的ThisDocument类方法的可选 ref 参数。 Visual C# 使你只能省略接口方法的可选 ref 参数,而不是类。 例如,下面的代码示例不编译,因为不能省略类方法的ThisDocument可选 ref 参数CheckSpelling

Globals.ThisDocument.CheckSpelling(ignoreUppercase: true);

调用 ThisDocument 类的方法时,请遵循以下准则:

  • 若要接受可选 ref 参数的默认值,请将 missing 变量传递给参数。 在 Visual C# Office 项目中自动定义 missing 变量,并分配给生成的项目代码中的值 Missing

  • 若要为可选 ref 参数指定自己的值,请声明分配给要指定的值的对象,然后将该对象传递给参数。

    下面的代码示例演示如何通过指定 ignoreUppercase 参数的值并接受其他参数的默认值来调用CheckSpelling该方法。

    object ignoreUppercase = true;
    Globals.ThisDocument.CheckSpelling(
        ref missing, ref ignoreUppercase, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
    

    如果要编写代码,该代码省略类中ThisDocument方法的可选 ref 参数,也可以对Document属性返回InnerObject的对象调用相同的方法,并省略该方法中的参数。 可以这样做是因为 Document 是接口而不是类。

    Globals.ThisDocument.InnerObject.CheckSpelling(IgnoreUppercase: true);
    

    有关值和引用类型参数的详细信息,请参阅按值传递参数以及按引用(适用于 Visual Basic)传递参数(C# 编程指南)。