您的位置:首页 > 编程语言 > VB

Word 2010 中的 VBA 入门

2016-06-07 14:27 357 查看
摘要:  介绍新程序员使用 Visual Basic for Applications (VBA) 编程来扩展 Microsoft Word 2010。本主题汇总了 VBA 语言、有关如何访问 Word 2010 中的 VBA 的说明、实际 Word VBA 编程问题的详细解决方案以及有关如何编程和调试的提示。

上次修改时间: 2015年5月11日

适用范围: Office 2010 | Open XML | Visual Studio Tools for Microsoft Office | Word 2007 | Word 2010

本文内容 
什么是宏?为什么我需要宏?我如何才能创建宏? 
第 2 部分:编写更复杂的宏 
结论 
其他资源 
关于作者 

发布时间:2010 年 4 月

供稿人:Shauna Kelly

目录

第 1 部分:端到端的宏示例

第 2 部分:编写更复杂的宏

结论

其他资源

关于作者


什么是宏?为什么我需要宏?我如何才能创建宏?



通过宏,您可以让 Word 自动执行某些操作。

每次在 Word 中执行频繁的任务时,如果必须进行一大串鼠标单击或击键操作,则执行该任务会让人心生厌烦。当编写宏时,可以绑定一个命令集合,并指示 Word 仅需一次单击或击键即可启动它们。

本文假定您是技能熟练的 Word 用户。同时,还假定您不了解有关计算机编程或软件开发的任何信息。

本文分为两部分:

本文第一部分将介绍端到端的示例:如何编写简单的宏、可以在什么位置保存它、如何在快速访问工具栏上创建按钮或创建键盘快捷方式来运行该宏,以及如何将该宏复制到其他计算机上(这样您就可以在家以及在工作时使用它,或者可以与同事共享它)。这部分会为您提供一个简单的示例。

本文的第二部分将详细检查宏:如何编写更复杂的宏以及如何确保您的宏确实执行您所需的操作并且不会产生错误或问题。


第 1 部分:端到端的宏示例

宏的一个用途是,您只需一次单击或击键即可执行任务。

我经常创建包含网站超链接的文档。默认情况下,Word 会要求我按住 Ctrl 同时单击超链接来跟踪或打开该超链接。以下图像显示了跟踪超链接的默认选项。
图 1. 按 Ctrl 同时单击超链接来跟踪它



下图显示了通过单击超链接对其进行跟踪的备用选项。
图 2. 单击以跟踪超链接



有时这比较有用,但有时我更喜欢通过单击它来跟踪超链接(图 2)。我可能一天配置此设置很多次。为此,单击"文件"按钮,然后在"帮助"下,我单击"选项"。在"Word 选项"对话框中,我单击"高级",然后在"编辑"选项下,我选中(或清除)"用 Ctrl + 单击跟踪超链接",然后单击"确定"。重复执行这一串鼠标单击操作令人烦恼。我希望只需单击一次就能配置此设置。

本节介绍如何创建简单的宏在使用 Ctrl+单击 与仅单击超链接之间切换。若要创建此宏,您要了解如何:

创建启用 Word 宏的模板文件 (.dotm) 来存储您的宏并将其保存在 Word Startup 文件夹中。

打开并使用 Visual Basic 编辑器,这是 Word 的一部分。

在 Visual Basic 编辑器中编写宏。

测试您的宏。

在快速访问工具栏上创建按钮来运行您的宏。

创建键盘快捷方式来运行您的宏。

保存您的文件,将其作为加载项来加载,以及在您需要时与同事共享它,或者在其他计算机上使用它。

本节介绍每个步骤。


创建文件来保存您的宏

在开始编写宏之前,请先考虑希望如何以及在哪里保存它。

Word 允许您以两种 Word 文件类型保存宏:启用 Word 宏的文档文件 (.docm) 和启用 Word 宏的模板文件 (.dotm)。这不是在文档中存储宏的建议做法。宏通常存储在启用 Word 宏的模板文件 (.dotm) 中。

可以将宏保存在 Normal 模板 (Normal.dotm) 中,但这样很难组织或共享您的宏。通常创建您自己的文件并将宏保存在那里,这样更为可取。

在哪里保存模板文件取决于希望如何使用宏。您必须决定是要将宏用于您可能使用的所有文档,还是仅用于某些文档。

例如,您可能会创建月销售报告模板,并可能具有宏来设置这些报告的格式。在此情况下,在"用户模板"文件夹里保存模板文件,并根据该模板创建新文档。(若要验证"用户模板"文件夹,请单击"文件"选项卡,然后单击"选项"。在"Word 选项"对话框中,单击"高级",然后单击"文件位置"按钮。)如果将宏存储在模板中,则只有附加到该模板的文档才可以访问该宏。其他文档将无法"看到"该宏。

在本文中,您将创建可为任何文档所用的宏。为此,将创建启用宏的模板文件。首先,关闭您打开的任何 Word 文件。若要创建新文件来保存您的宏,请依次单击"文件"按钮、"新建"、"我的模板"。在"新建"对话框中,选择"模板"选项按钮,然后单击"确定"。将文件另存为启用宏的模板文件,名为 MyWordTools.dotm(在 Word Startup 文件夹中)。(若要验证 Word Startup 文件夹,请单击"文件"选项卡,然后单击"选项"。在"Word
选项"对话框中,单击"高级",然后单击"文件位置"按钮。)


使用 Visual Basic 编辑器

Word 宏是用称为 Visual Basic for Applications (VBA) 的编程语言编写的。

您在 Word 的一部分(Visual Basic 编辑器 (VBE))中编写宏,大多数用户从未见过这部分。使用以下任一方法打开 VBE:

按键盘快捷方式, Alt+F11

单击"开发工具"选项卡上的"Visual Basic"按钮。为此,请单击"文件"选项卡,然后单击"选项"。在"Word 选项"对话框中,单击"自定义功能区"。在该对话框的右侧,选择"开发工具"选项卡。单击"确定"返回到您的文档,然后在"开发工具"选项卡上,单击"Visual Basic"按钮。

将 Visual Basic 命令添加到快速访问工具栏中。

开始使用 VBE 之前,请在"工具"菜单上,单击"选项"。在"选项"对话框的"编辑器"选项卡上,确保选中了所有复选框。

在 VBE 左上侧,可以看到"项目资源管理器"。其中将显示当前在 Word 中打开的所有文件。应该会看到"Normal"(指 Normal.dotm)和"MyWordTools"(您刚刚创建的新文件)。

下图显示了 Visual Basic 编辑器项目资源管理器中的 MyWordTools 项目。
图 3. Visual Basic 编辑器项目资源管理器



在您的文件内,宏存储在"模块"中。若要向您的文件中添加模块,请在"项目资源管理器"中,选择"MyWordTools"文件(图 3)。在"插入"菜单上单击"模块"。向文件中添加模块时,您将会在"项目资源管理器"和其下的"属性窗口"中看到所添加的模块(图 4)。您可以使用"属性窗口"对模块重命名。将名称保留为"模块 1"。

下图显示了 Visual Basic 编辑器项目资源管理器中的"模块 1"。
图 4. Visual Basic 编辑器项目资源管理器



最后,您将看到您的文件条目命名为 TemplateProject。虽然不是必需的,但还是建议您为文件提供一个描述性的名称。为此,请右键单击"MyWordTools"文件条目,然后单击快捷菜单上的"TemplateProject 属性"(图 5)。

下图显示了"TemplateProject 属性…"菜单项
图 5. 属性菜单项



在"模板项目-项目属性"对话框中,将项目名称更改为 MyWordTools。


编写您的宏

VBE 右侧较大的白色区域是您编写宏代码的位置。如果您看不到该区域,请在"视图"菜单上,单击"代码"即可看到代码窗口。Word 会自动在代码窗口顶部插入声明 Option Explicit。请勿删除此声明。

在 Word 中,您希望宏在两个可能的设置之间切换,以跟踪超链接。其工作原理将与在 Word 中切换设置的其他按钮类似。例如,如果文字不是粗体,则"开始"选项卡上的"加粗"按钮会将文字加粗;而如果当前是粗体,则将文字变为非粗体。

将下面的宏代码示例复制并粘贴到代码窗口中。

VBA

Sub ToggleHyperlinkCtrlClick()
Options.CtrlClickHyperlinkToOpen = Not Options.CtrlClickHyperlinkToOpen
End Sub


这是一个名为 ToggleHyperlinkCtrlClick 的简短宏,仅包含一行代码。宏中这一行代码表示"更改控制我是否必须使用 Ctrl+单击 来打开其当前设置的反向设置(即,Not 其当前设置)的超链接的 Word 选项"(图 6)。

下图显示了 ToggleHyperLinkCtrlClick 方法的逐行说明。
图 6. ToggleHyperLinkCtrlClick 方法的说明




测试您的宏

若要测试您的宏,请使用以下过程。


测试宏

排列 Word 和 VBE 窗口,以便您可以并排查看它们。

单击 Word 主窗口。将多段文本键入 MyWordTools.dotm 文档。在文本中包括一些超链接(图 7)。

下面的图像并排显示了 VBE 中的 MyWordTools 文档和 ToggleHyperLinkCtrlClick 代码。
图 7. 并排显示文档和 Visual Basic 编辑器



在 VBE 中,单击宏中的任意位置。若要运行宏,请在"运行"菜单上,单击"运行子窗体/用户窗体"或按"F5"。

跟踪超链接的设置将会更改。将鼠标悬停在 Word 主窗口的超链接上可以看到工具提示已更改。

重新运行宏以切换设置。

还可以在 Word 本身中运行宏。在"视图"选项卡上的"宏"组中,单击"宏"按钮。您的 ToggleHyperlinkCtrlClick 宏将列在"宏"对话框中。若要运行您的宏,请单击宏的名称,然后单击"运行"按钮。


在快速访问工具栏上创建一个按钮来运行您的宏

若要获取对宏的一键式访问,可以向快速访问工具栏中添加按钮。为此,请使用以下过程。


在快速访问工具栏上创建按钮

右键单击"快速访问工具栏",然后单击快捷菜单上的"自定义快速访问工具栏"。

在"自定义快速访问工具栏"下的"从下列位置选择命令"列表中,选择"宏"。

在"自定义快速访问工具栏"列表中,选择 MyWordTools.dotm。(必须选择 MyWordTools.dotm 以便 Word 将快速访问工具栏上的按钮保存在 MyWordTools.dotm 文件中。仅在这时,当您将该文件复制到其他计算机上时该按钮才可用。)

选择 ToggleHyperlinkCtrlClick 宏,然后单击"添加"。

单击"修改"按钮选择一个符号,并将名称更改为 ToggleHyperlinkCtrlClick。

现在可以通过单击快速访问工具栏上的新按钮随时运行您的宏。


创建键盘快捷方式来运行您的宏

可以创建键盘快捷方式来运行您的宏。为此,请使用以下过程。


创建键盘快捷方式来运行宏

右键单击"快速访问工具栏",然后单击快捷菜单上的"自定义功能区"。在"键盘快捷方式"旁边,单击"自定义"按钮。

下图显示了"自定义键盘"对话框
图 8."自定义键盘"对话框



在"自定义键盘"对话框中(图 8),您必须:

在"类别"列表中,选择"宏"。

在"宏"列表中,单击宏名称。

在"请按新快捷键"框中单击,然后键入要使用的键盘快捷方式。我使用的是 Alt+H,我可以记住它,因为这将切换超链接的设置。该对话框还告诉我此快捷方式当前未分配,因而我不会干扰现有的键盘快捷方式。

在"将更改保存在"列表中,选择"MyWordTools.dotm"。(必须选择"MyWordTools.dotm",以便 Word 将该键盘快捷方式保存在 MyWordTools.dotm 文件中。仅在这时,当您将该文件复制到其他计算机上时该按钮才可用。)

单击"分配"。

若要运行您的宏,请按 Alt+H。


完成

现在您已创建一个新文件来保存您的宏 (MyWordTools.dotm)、已添加模块(模块 1)、已创建您的宏(称为 ToggleHyperlinkCtrlClick)、已在快速访问工具栏上创建按钮来启动该宏,并已创建键盘快捷方式来启动该宏。现在保存 MyWordTools.dotm 文件(可以在 VBE 中或从 Word 主窗口执行此操作)。

由于您已完成 VBE 的使用,因此请关闭它并返回到 Word。为此,在 VBE 中,单击"文件"菜单,然后单击"关闭并返回到 Microsoft Word"。

若要测试您的宏,请单击快速访问工具栏上的按钮。在确认其正在工作后,保存并关闭该文件。


管理和加载加载项

计划是此宏应该可用,而不管您要使用哪个文档。但是,如果您创建新文档(使用 Ctrl+N),则将无法在快速访问工具栏上看到您的按钮。无法启动您的宏。

若要使存储在 MyWordTools.dotm 中的宏可用于您打开的任何文档,必须将 MyWordTools.dotm 作为加载项来加载。(当 .dotm 文件用作加载项时,它还称为"全局模板"。)您可以手动,也可以自动将 .dotm 文件作为加载项来加载:

若要手动将 .dotm 文件作为加载项来加载,请关闭该 .dotm 文件(如果当前它处于打开状态)。在"开发工具"选项卡上,单击"加载项"按钮。在"模板和加载项"对话框中,单击"添加",找到您的 .dotm 文件,然后单击"打开"。

若要自动将 .dotm 文件作为加载项来加载,必须将 .dotm 文件保存在 Word Startup 文件夹中。退出并重新启动 Word。Word 将自动加载您的加载项。

您可以看到 Word 中当前加载的加载项。在"开发工具"选项卡上,单击"加载项"按钮。

因为您将 MyWordTools.dotm 保存在 Word Startup 文件夹中,所以关闭并重新启动 Word。Word 会自动将 MyWordTools.dotm 作为加载项来加载。您应该会在快速访问工具栏上看到该按钮,并且可以使用您的宏。

当 MyWordTools.dotm 作为加载项来加载时,将看不到您可能在 MyWordTools.dotm 的 Word 主窗口中留下的任何文本。Word 不使用文档本身表面的任何内容。在保存用作加载项的 .dotm 文件之前,先删除 Word 主窗口中的任何文本。

必须在打开加载项文件(例如,通过单击"文件",然后单击"打开")与加载加载项(例如,使用"开发工具"选项卡上的"加载项"按钮)之间加以区分。在需要对文件进行编辑和测试时将其打开。在需要使用该文件时,将其作为加载项来加载。


 警告
如果当前已在 Word 中打开了文件,则决不要将该文件作为加载项来加载。如果加载项文件当前是作为加载项加载的,则决不要打开和编辑它。这可能会导致不可预知的行为。


在其他计算机上使用您的宏

若要使用您的宏,您必须有:

宏代码。

快速访问工具栏上运行宏的按钮。

运行宏的键盘快捷方式。

您将所有三个都保存在了 MyWordTools.dotm 中。因此,若要在其他计算机上使用您的宏或共享您的宏,您只需将 MyWordTools.dotm 复制到其他计算机上的 Word Startup 文件夹中。当您启动 Word 时,Word 会将 MyWordTools.dotm 作为加载项来加载,而您的宏、按钮和键盘快捷方式都将可用。



2 部分:编写更复杂的宏



第 1 部分端到端的示例包括仅有一行代码的简单宏。第 2 部分将介绍如何扩展该基本的端到端的过程来创建更为复杂的宏。


向 MyWordTools.dotm 文件中添加其他宏

您在第 1 部分创建的文件 MyWordTools.dotm 现在包含一个模块(模块 1),并且该模块包含一个宏 (ToggleHyperlinkCtrlClick)。

在文件作为加载项而加载时,请勿编辑它。若要向文件中添加其他宏,您必须:

作为加载项卸载文件。为此,在"开发工具"选项卡上,单击"加载项",再通过单击来清除加载项对应的复选框,然后单击"确定"。

打开文件进行编辑。为此,请单击"文件"选项卡。在"信息"下,单击"打开"。找到该文件,单击该文件,然后单击"打开"。

当您的文件处于打开状态以供编辑时,您可以:

通过以下方式向现有模块(模块 1)中添加宏:在代码窗口中进行键入,或者

向文件中添加一个新模块,并在该新模块中键入新宏。

您使用哪种方法取决于宏的复杂程度。如果您只有几个简短的宏,则通常将其全部放在一个模块中。如果您有很多较长的宏,则可能希望将其存储在单独的模块中,并对每个模块重命名以指示模块中包含哪些宏。

向文件中添加新宏后,可以对其进行测试、在快速访问工具栏上为其创建按钮,以及为其创建键盘快捷方式,与您对第一个宏的做法完全一样。


注释

专业开发人员通常会在其代码中包含注释,以说明代码的用途。

可以将单个撇号置于注释文本之前来向宏中添加注释。默认情况下,VBE 将以绿色显示注释。


编写强大的代码:对文本进行排序的宏

如果将宏与同事共享,则需要考虑以下两点。首先,其他人的计算机的设置与您的设置不完全相同,这几乎是可以肯定的。其次,其他人可能不像您那样,能够容忍很差的代码。因此您的代码必须可靠。

如果宏可靠,则用户将不会看到难以理解的错误消息,并且该宏将按预期运行,执行的操作不多不少刚刚好。

若要演示编写强大代码时的一些问题,请考虑下面用于对文本排序的宏。

它进行几次鼠标单击来对多个文本段落进行排序。如果您必须频繁对文本排序,则让单个按钮执行简单的排序将会很有用(当您必须执行更复杂的排序时,"开始"选项卡上的内置按钮仍将对您可用)。此宏操作将显示在下面的代码示例中。

VBA

Sub SortText1()
' A macro to sort the selected text
Selection.Sort
End Sub


您可以像测试前一个宏一样测试此宏。并排平铺 Word 和 VBE 窗口。在 Word 主窗口中,键入多个文本段落并将其选中。在 VBE 中,通过单击宏代码并按 F5来运行该宏。Word 将按字母顺序对这些段落进行排序。

我们的 SortText1 宏似乎运行良好,但它并不可靠。若要查看可能出错的内容,请向文档中插入一张图片。使其成为浮动图片。为此,选中该图片。在"格式"选项卡的"图片工具"下的"排列"组中,单击"定位"。选择其中任何一个"文字环绕"页面定位选项。

选中您的图片,然后运行 SortText1 宏。因为 Word 对一张浮动图片进行排序没有意义,所以您将会在 Visual Basic 中看到错误消息。这不是一个可靠的宏!

我们的一行代码 Selection.Sort 仅在您选择普通文本时才会正常工作。在您找到解决该问题的方法之前,请考虑另一个问题。


警告
如果您在不选中任何文本的情况下在文档中单击并运行 SortText1 宏,则将对整个文档进行排序。在最好的情况下,这是一种意外操作;在最坏情况下,这可能会造成数据损坏。
下面的代码示例演示如何将宏限制为仅在选中两个或多个文本段落时才进行排序。

VBA

Sub SortText2()
' A macro to sort the Selection if the user has selected more than one
' paragraph of text.
If Selection.Paragraphs.Count > 1 Then
Selection.Sort
End If
End Sub


尝试运行 SortText2 宏。与 SortText1 不同,如果您选择图片然后运行此宏,则此宏不会显示错误消息。此外,它还不会让您意外地对整个文档进行排序。若要了解发生的情况,请使用以下分步过程一次处理一行代码。


逐步处理 VBA 代码

在 Word 主窗口中单击,然后选中您的图片。

在 SortText2 宏内单击任意位置。

按 F8。Word 将突出显示宏中的第一行 (Sub SortText2())。

反复按 F8 按行逐步处理代码。

使用 F8 逐步处理代码是查看代码执行状况以及解决代码问题的常用方法。在这种情况下,您会看到在选中图片后,Word 将处理 If 语句,但会跳过 Selection.Sort 语句。

在新的 SortText2 宏中需要了解几个重要事项:

可以使用 If 和 End If 来控制 Word 是处理还是跳过代码。

If 行以关键字 Then 结束。

每个 If 都必须有对应的 End If。

此宏使用 Selection 两次。Selection.Paragraphs.Count 提供有关用户所选内容的信息。Selection.Sort 对所选文本进行排序。

下面的代码示例演示如何扩展此宏来使用 Else 和 MsgBox 关键字向用户提供信息。

VBA

Sub SortText3()
If Selection.Paragraphs.Count > 1 Then
' The user has selected more than one paragraph of text.
' Sort the selection.
Selection.Sort
Else
' Tell the user what to do.
MsgBox "Please select two or more paragraphs and try again."
End If
End Sub


从此宏中,您可以看到:

可以使用 If…Then、Else 和 End If 来控制 Word 是处理还是跳过代码。

使用 Else 语句是可选的。每个 If 语句都可能有零个或一个 Else 语句。

如果您使用 Else,则仍需要 End If。

该命令在屏幕上向用户显示一条消息。在关键字 MsgBox 后边键入消息文本,然后用双引号将其括起来。如果您在宏中提供任何文本(如此消息的文本),则必须用双引号 (") 将其括起来。如果没有双引号,则 Word 会尝试在 Word 对象模型中查找"Please"。由于 Word 不知道"Please"表示什么,因此,宏会引发错误消息。

若要查看该问题,请使用下面的过程。


测试 SortText3 宏

在快速访问工具栏上创建一个按钮来启动 SortText3 宏。指示 Word 将该按钮保存在 MyWordTools.dotm 中。

测试您的按钮以确保其运行 SortText3 宏。

保存 MyWordTools.dotm 文件

退出并重新启动 Word

如果文档处于打开状态,则将其关闭,以便没有打开的文档。

再次在快速访问工具栏上测试您的按钮。

您应该看到一条错误消息。因为宏的第一行引用了"Selection",所以会出现该错误。加载项已加载。如果 Word 主窗口中没有打开的文档,则没有Selection。如果没有 Selection,则 Word 无法运行宏中的代码。

对宏再做一项更改以使其可靠。向宏的顶部添加一条注释。这是记录宏的好方法,这样任何人都会知道该宏的用途。

卸载该加载项,然后打开文件进行编辑。将现有的宏替换为下面的代码示例。

VBA

Sub SortText()
' A macro to sort the selected text, if the user has selected
' more than one paragraph

If Documents.Count > 0 Then
' The user has at least one document open.

If Selection.Paragraphs.Count > 1 Then
' The user has selected more than one paragraph
' of text, so sort it.
Selection.Sort
Else
' Tell the user what to do.
MsgBox "Please select two or more paragraphs and try again."
End If
End If
End Sub


在 SortText 的此最终版本中,此示例使用的是嵌套 If…End If 块。务必将代码缩行。每个 If 都要与正确的 End If 配对。

不可靠的宏可能会导致:

错误消息(例如,已使用 Selection 对象,但没有处于打开状态的文档,因而没有 Selection)或

不需要的行为(例如,在 Selection.Sort 命令意外对整个文档进行排序时)。

以下是编写可靠宏的提示。

如果您的宏引用 Selection,则创建测试文档,并在选择文档的其他部分之后通过运行该宏对其进行测试:只需进行单击,以便没有选择任何文本,将光标移到文档顶部或底部,或者选择单个字词、多个段落、一张图片、部分或全部表、页眉或页脚中的文本、脚注中的文本,或者尾注或注释,等等。

关闭您的文件,将其作为加载项来加载并测试您的宏以确保该宏在没有打开任何文档的情况下可以运行。使用 If Documents.Count > 0 可以验证文档是否处于打开状态。


了解 Word 对象模型

此时创建的宏使用了三个重要的 Word 元素:

Options。此元素引用了用于设置 Word 的选项。

Documents。此元素引用了 Word 中当前打开的所有文档。您可以使用关键字 ActiveDocument 来引用当前处于活动状态的文档。

Selection。此元素引用了用户在 ActiveDocument 中所选的任何内容。这些内容可以是一个字词、多个段落、一张图片或任何其他类型的内容。

对于这些宏中的每一个,使用的是以下级别较低的元素:

CtrlClickHyperlinkToOpen

Count

Selection.Sort

这些元素(Options、Documents 和 Selection)称为对象,而它们均为 Word
对象模型的一部分。

对象模型是一个层次结构。该层次结构包括 Word 中您可能需要宏来控制的所有部分。例如,ActiveDocument 对象引用当前处于活动状态的文档。

如果您当前的文档中包含至少具有 3 行 2 列的表,则以下会显示活动文档中第一个表的第三行内第二个单元格中的文本。

VBA

MsgBox ActiveDocument.Tables(1).Rows(3).Cells(2).Range.Text


宏可以操纵对象(如 Selection 对象或 ActiveDocument 对象)。实际上,对象有两种方式来操纵它们:方法和属性。

方法就像谓词,用于描述操作。例如:

ActiveDocument.PrintPreview

ActiveDocument.AcceptAllRevisionsShown

属性就像形容词,用于描述对象。例如:

MsgBox ActiveDocument.Paragraphs(1).Range.Text

ActiveDocument.Paragraphs(1).Range.Text = "New text for Paragraph 1"

在此处的第一个示例中,宏"正在读取"Text 属性并在消息框中显示文本。在第二个示例中,宏"正在写入"(或设置)Text 属性。运行这行代码会将第一段中的现有文本更改为"第 1 段的新文本"。

通常,您的宏可以"读取"属性,也可以"写入"属性。但是,某些属性是只读的。例如,Documents 对象有一个名为 .Count 的属性。请考虑以下情况:

MsgBox Documents.Count ' Reports the number of currentlyopen documents.

Documents.Count = 4 ' Does not work: .Count is a readonly property.


编写快捷方式代码:切换文本边界显示的宏

在我编辑较大的文档时,我想看到文档中的文本边界。在我校对时,我希望关闭文本边界。我一天可能多次打开和关闭文档边界的显示。为此,我单击"文件"按钮,然后在"帮助"下,单击"选项"。在"Word 选项"对话框中,我单击"高级",然后在"显示文档内容"下,我选中(或清除)"显示文本边界",然后单击"确定"。重复执行这一串鼠标单击操作令人烦恼。我希望单击一次就可以打开或关闭文本边界。

以下代码示例是用于切换文本边界显示的宏。

VBA

Sub ToggleTextBoundaries1()
ActiveDocument.ActiveWindow.View.ShowTextBoundaries = Not ActiveDocument.ActiveWindow.View.ShowTextBoundaries
End Sub


Word 不介意一行代码有多长,但是键入量很大,而且让人难以阅读。若要缩短该宏并使其便于阅读,请按以下代码示例中所示的方式使用 With 关键字。

VBA

Sub ToggleTextBoundaries2()
With ActiveDocument.ActiveWindow.View
.ShowTextBoundaries = Not .ShowTextBoundaries
End With
End Sub


在对象模型中,您可以在层次结构的各个项之间使用句点 (.) 从一个对象深入到其他对象。因为句点会将子对象与其父对象划分开,所以代码行不能以句点开头,但使用 With 关键字时除外。

每个 With 都必须与 End With 语句成对。在 With 与 End With 之间,可以使用句点作为快捷方式的开始。

VBA

With ActiveDocument.ActiveWindow.View
' Between With and End With you can use
' a period to begin shortcut code.
' The shortcut will refer to ActiveDocument.ActiveWindow.View.
End With


例如,在此 With 与 End With 之间,快捷方式 .ShowTextBoundaries 引用 ActiveDocument.ActiveWindow.View.ShowTextBoundaries。

在有多次引用同一对象的代码后,键入量就会较少,并且易于阅读(如果您使用 With 和 End With)。

这还算不上可靠的宏,但是您可以制成一个最终稳固的版本,如下面的代码示例所示。

VBA

Sub ToggleTextBoundaries()
If Documents.Count > 0 Then
With ActiveDocument.ActiveWindow.View
.ShowTextBoundaries = Not .ShowTextBoundaries
End With
End If
End Sub


在 ToggleTextBoundaries 的此最终版本中,有一个 With…End With 块,它嵌入在 If…End If 块中。通过缩进代码行,可以确保每个 With 都与其 End With 配对,并且每个 If 语句都与其 End
If 语句配对。


使用 With 和 Selection 对象:插入横向部分的宏

下面是更完整的使用 With 关键字的示例:在光标处插入横向部分的宏

此宏将 With 关键字与 Selection 对象(即 With Selection)一起使用。随着您在编写宏方面日趋熟练,您会发现使用 Selection 对象的次数日臻减少,原因是通常使用 Range 对象更为有效。研究此宏是了解
Word 如何管理 Selection 的好方法。将 Word 和 VBE 并排平铺后,在宏中单击,然后重复按 F8 按行逐步处理该宏,以查看 Word 主窗口中发生的情况。

此宏还会显示,当您有多行文本时,建议您将其分解为逻辑"段",配上注释来描述代码的用途。

VBA

Public Sub InsertLandscapeSectionHere()
' Purpose: Insert a landscape section at the insertion point,
' and insert text to tell the user where the landscape section is.
If Documents.Count > 0 Then
' The user has a document open, so insert a
' landscape section.
With Selection
' Do not accidentally over-write selected text
.Collapse Direction:=wdCollapseStart

' Insert section breaks with blank paragraphs
' in the new section.
.TypeParagraph
.Style = ActiveDocument.Styles(wdStyleNormal)
.InsertBreak Type:=wdSectionBreakNextPage
.TypeParagraph
.TypeParagraph
.TypeParagraph
.InsertBreak Type:=wdSectionBreakNextPage
.MoveUp Unit:=wdLine, Count:=3

' Set the orientation of new section to landscape.
.PageSetup.Orientation = wdOrientLandscape

' Provide guidance to the user.
.TypeText Text:="Your landscape section starts here."
End With
Else
' Tell the user what to do.
MsgBox "Please open a document and try again."
End If
End Sub


在此宏中,您将看到两类语法:

第一个语法是使用等号 (=):Selection.PageSetup.Orientation = wdOrientLandscape

第二个语法是使用冒号和等号 (=):Selection.InsertBreak Type:=wdSectionBreakNextPage。

有关这些语法类型之间的差异的详细信息,请参阅 VBE 帮助中的文章"了解 Visual Basic 语法"。


了解有关 Word 宏和 Visual Basic 编辑器的详细信息

Visual Basic 编辑器 (VBE) 包括帮助您编辑自己的宏的工具。以下是需要考虑的事项的列表:

Word 宏录制器是一个强大的工具。如果您想编写宏,但不知道必须使用 Word 对象模型的哪些部分,则宏录制器是最佳解决方式。有关详细信息,请参阅录制宏以生成代码如何修改录制的宏

如果键入 Word 对象模型中某个对象的名称(如 Selection 或 ActiveDocument),然后键入句点 (.) ,则 Word 会显示该对象的所有属性和方法的列表。有关详细信息,请参阅在
15 分钟内搞定 VBA 基础知识。

VBE 中的"即时窗口"可以帮助您了解有关 Word 对象模型以及测试简单宏的更多信息。有关详细信息,请参阅用简单的 VBA 代码行扩展 Word 2007、Excel 2007 和 PowerPoint 2007

您可以自定义 VBE 中的菜单和工具栏。一项有用的自定义是创建用于注释的键盘快捷方式。为此,在菜单或工具栏附近的开阔空间中右键单击,然后选择"自定义"。在"自定义"对话框的"工具栏"选项卡上,选择"编辑"工具栏。将"自定义"对话框保留为打开状态。在"编辑"工具栏上,右键单击"注释"块按钮,将名称更改为 &Comment,然后单击"图像"和"文本"。对"取消注释"块按钮执行同样的操作,并将其重命名为 &Uncomment。您现在可以选择多个代码行,并使用键盘快捷方式
Alt+C 和 Alt+U 对所选代码进行注释或取消注释。

VBE 中包含大量的"帮助"信息。这将是在 Word 对象模型方面的主要信息源:

若要了解一般信息,请在 VBE 中的"帮助"菜单上,单击"Microsoft Visual Basic for Applications"帮助。务必通过单击客户端帮助查看器工具栏中的小书图标来显示"目录"。这使浏览开发工具帮助更为直观。特别是,在"概念"下阅读"常见 Visual Basic 问题"的主题。

若要了解有关 Word 对象模型(如 ActiveDocument)中的关键字或对象的特定帮助,请在 Word 中单击并按 F1 来阅读有关该关键字或对象的帮助。


结论



Word 宏可以很长、很复杂并且功能很强大。您可以编写宏与外部数据库对话,执行计算以及将结果返回 Word。此外,您还可以在 Word 中编写宏来控制 Excel、PowerPoint 或 Outlook。有时简单的宏会很有用并且省时。

如果您的宏要对文本设定格式,则创建"样式"(而非编写宏)可能更好。如果该宏要控制文档的版式,则创建一个新模板可能更佳。此外,可能还有一个内置命令,可以将其添加到快速访问工具栏中(自定义快速访问工具栏时,在"从下列位置选择命令:"列表中,单击"所有命令")。

创建宏乐趣无穷,但是不要通过编写宏做 Word 已经可以自己做的工作来做重复的无用功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: