Word VBA教程:理解对象、属性和方法 对象是 Visual Basic 的结构基础,在 Visual Basic 中进行的所有操作几乎都与修改对象有关。Microsoft Word 的任何元素,如文档、表格、段落、书签、域等,都可用 Visual Basic 中的对象来表示。 什么是对象和集合? 对象代表一个 Word 元素,如文档、段落、书签或单独的字符。集合也是一个对象,该对象包含多个其他对象,通常这些对象属于相同的类型;例如,一个集合对象中可包含文档中的所有书签对象。通过使用属性和方法,可以修改单独的的对象,也可修改整个的对象集合。 什么是属性? 属性是对象的一种特性或该对象行为的一个方面。例如,文档属性包含其名称、内容、保存状态以及是否启用修订。若要更改一个对象的特征,可以修改其属性值。 若要设置属性的值,可在对象的后面紧接一个句号、属性名称、一个等号及新的属性值。下列示例在名为“MyDoc.doc”的文档中启用修订。 Sub TrackChanges() Documents("Sales.doc").TrackRevisions = True End Sub 在本示例中,Documents 引用由打开的文档构成的集合,而“MyDoc.doc”标识集合中单独的文档。并设置该文档的TrackRevisions属性。 不能设置某些属性。属性的“帮助”主题中会标明可以设置该属性(可读写),或只能读取该属性(只读)。 通过返回对象的一个属性值,可以获取有关该对象的信息。下列示例返回活动文档的名称。 Sub GetDocumentName() Dim strDocName As String strDocName = ActiveDocument.Name MsgBox strDocName End Sub 在本示例中,ActiveDocument 引用 Word 活动窗口中的文档。该文档的名称赋给了strDocName 变量。 说明 每个属性的“帮助”主题表明可以设置该属性(可读写),只能读取该属性(只读),或只能写入该属性(只写)。此外“Visual Basic 编辑器”中的“对象浏览器”在浏览窗口的底部显示所选属性的读写状态。 什么是方法? 方法是对象可以执行的动作。例如,只要文档可以打印,Document对象就具有PrintOut方法。方法通常带有参数,以限定执行动作的方式。下列示例打印活动文档的前三页。 Sub PrintThreePages() End Sub 在大多数情况下,方法是动作,而属性是性质。使用方法将导致发生对象的某些事件,而使用属性则会返回对象的信息,或引起对象的某个性质的改变。 返回一个对象 可通过返回集合中单独的对象的方式来返回大多数对象。例如Documents集合包含打开的 Word 文档。可使用(位于 Word对象结构顶层的)Application对象的Documents属性返回 Documents集合。 在访问集合之后,可以通过在括号中使用索引序号(与处理数组的方式相似)返回单独的对象。索引序号通常是一个数值或名称。详细内容,请参阅返回集合中的对象。 下列示例使用 Documents属性访问 Documents集合。索引序号用于返回 Documents集合中的第一篇文档。然后将Close方法应用于 Document对象,关闭 Documents集合中的第一篇文档。 Sub CloseDocument() Documents(1).Close End Sub 下列示例使用名称(指定为一个字符串)来识别 Documents集合中的 Document对象。 Sub CloseSalesDoc() Documents("Sales.doc").Close End Sub 集合对象通常具有可用于修改整个对象集合的方法和属性。Documents对象具有Save方法,可用于保存集合中的所有文档。下列示例通过使用 Save方法保存所有打开的文档。 Sub SaveAllOpenDocuments() Documents.Save End Sub Document对象也可使用 Save方法保存单独的文档。下列示例保存名为 Sales.doc 的文档。 Sub SaveSalesDoc() Documents("Sales.doc").Save End Sub 若要返回一个处于 Word对象结构底层的对象,就必须使用可返回对象的属性和方法,“深入”到该对象。 若要查看该过程的执行,请打开“Visual Basic 编辑器”,在“视图”菜单上单击“对象浏览器”。单击左侧“类”列表中的 Application。然后单击右侧“成员”列表中的 ActiveDocument。“对象浏览器”底部会显示文字,表明 ActiveDocument 是只读的,该属性返回 Document对象。然后单击“对象浏览器”底部的 Document,则会在“类”列表中自动选定 Document对象,并将在“成员”列表中显示 Document对象的成员。滚动成员列表,找到 Close,单击 Close方法。“对象浏览器”窗口底部会显示文字,说明该方法的语法。有关该方法的详细内容,请按 F1 或单击“帮助”按钮,以跳转到 Close方法的“帮助”主题。 根据这些信息可编写下列指令,以关闭活动文档。 Sub CloseDocSaveChanges() ActiveDocument.Close SaveChanges:=wdSaveChanges End Sub 下列示例将活动文档窗口最大化。 Sub MaximizeDocumentWindow() ActiveDocument.ActiveWindow.WindowState = wdWindowStateMaximize End Sub ActiveWindow属性返回一个 Window对象,该对象代表活动窗口。将 WindowState属性设为最大常量(wdWindowStateMaximize)。 下列示例新建一篇文档,并显示“另存为”对话框,这样即可为文档提供一个名称。 Sub CreateSaveNewDocument() Documents.Add.Save End Sub Documents属性返回 Documents集合。Add方法新建一篇文档,并返回一个 Document对象。然后对 Document对象应用 Save方法。 如上所示,可以使用方法或属性来访问下层对象。也就是说,在对象结构中,将方法或属性应用于某个对象的上一级对象,可返回该下级对象。返回所需对象之后,就可以应用该对象的方法并控制其属性。要查看对象结构分层的情况,请参阅Microsoft Word对象。 获得有关对象、方法和属性的“帮助”信息 在熟悉 Word对象模型之前,可以利用一些工具来深入了解对象结构。
Word VBA教程:将格式应用于文本 本主题包含与下列任务相关的 Visual Basic 示例: 下列示例使用Selection属性将字符和段落格式应用于选定文本。使用Font属性获得字体格式的属性和方法,使用ParagraphFormat属性获得段落格式的属性和方法。 Sub FormatSelection() With Selection.Font .Name = "Times New Roman" .Size = 14 .AllCaps = True End With With Selection.ParagraphFormat .LeftIndent = InchesToPoints(0.5) .Space1 End With End Sub 下列示例定义了一个Range对象,它引用了活动文档的前三个段落。通过应用Font 和ParagraphFormat对象的属性来设置 Range对象的格式。 Sub FormatRange() Dim rngFormat As Range Set rngFormat = ActiveDocument.Range( _ Start:=ActiveDocument.Paragraphs(1).Range.Start, _ End:=ActiveDocument.Paragraphs(3).Range.End) With rngFormat .Font.Name = "Arial" .ParagraphFormat.Alignment = wdAlignParagraphJustify End With End Sub 下列示例在当前文档的上部添加单词 Title。第一段居中对齐,并在该段落之后添加半英寸的间距。将单词 Title 的格式设为 24 磅 Arial 字体。 Sub InsertFormatText() Dim rngFormat As Range Set rngFormat = ActiveDocument.Range(Start:=0, End:=0) With rngFormat .InsertAfter Text:="Title" .InsertParagraphAfter With .Font .Name = "Tahoma" .Size = 24 .Bold = True End With End With With ActiveDocument.Paragraphs(1) .Alignment = wdAlignParagraphCenter .SpaceAfter = InchesToPoints(0.5) End With End Sub 下列示例切换选定内容中第一段的段前间距。宏将获取当前段前间距的值,如果该值为 12 磅,则删除段前间距格式(将SpaceBefore属性设为零)。如果段前间距的值为除 12 外的其它数值,则将 SpaceBefore属性设为 12 磅。 Sub ToggleParagraphSpace() With Selection.Paragraphs(1) If .SpaceBefore <> 0 Then .SpaceBefore = 0 Else .SpaceBefore = 6 End If End With End Sub 下列示例切换选定文本的加粗格式。 Sub ToggleBold() Selection.Font.Bold = wdToggle End Sub 下列示例将左边距和右边距增加 0.5 英寸。PageSetup对象包含文档的所有的页面设置属性(左边距、下边距、纸张大小等)。LeftMargin属性用于返回和设置左边距设置。RightMargin属性用于返回和设置右边距设置。 Sub FormatMargins() With ActiveDocument.PageSetup .LeftMargin = .LeftMargin + InchesToPoints(0.5) .RightMargin = .RightMargin + InchesToPoints(0.5) End With End Sub Word VBA教程:编辑文字 本主题包含与下列任务相关的 Visual Basic 示例: 有关其他编辑任务的信息和示例,请参阅下列主题: Selection对象的Type属性返回所选内容类型的信息。如果所选内容为插入点,则下列示例显示一条消息。 Sub IsTextSelected() If Selection.Type = wdSelectionIP Then MsgBox "Nothing is selected" End Sub 使用Collapse方法可将 Selection 或Range对象折叠到开始或结束点的位置。下列示例在所选内容的开头将所选内容折叠为一个插入点。 Sub CollapseToBeginning() Selection.Collapse Direction:=wdCollapseStart End Sub 下列示例将区域折叠至其结束点(在第一个单词之后),并添加新文本。 Sub CollapseToEnd() Dim rngWords As Range Set rngWords = ActiveDocument.Words(1) With rngWords .Collapse Direction:=wdCollapseEnd .Text = "(This is a test.) " End With End Sub 下列示例使用MoveEnd方法扩展所选内容的结尾以包含三个附加的单词。MoveLeft、MoveRight、MoveUp 和MoveDown方法也可以用于扩展 Selection对象。 Sub ExtendSelection() Selection.MoveEnd Unit:=wdWord, Count:=3 End Sub 下列示例使用 MoveEnd方法扩展区域,以包含活动文档中的前三个段落。 Sub ExtendRange() Dim rngParagraphs As Range Set rngParagraphs = ActiveDocument.Paragraphs(1).Range rngParagraphs.MoveEnd Unit:=wdParagraph, Count:=2 End Sub 使用SetRange方法可重新定义现有的 Range对象。有关详细信息,请参阅处理 Range对象。 通过更改某一区域中的内容可更改现有的文字。下列指令通过将Text属性设为“The”来更改活动文档中的第一个单词。 Sub ChangeText() ActiveDocument.Words(1).Text = "The " End Sub 也可以使用Delete方法删除现有文本,然后使用InsertAfter 或InsertBefore方法插入新文本。下列示例删除活动文档的第一段,并插入新文本。 Sub DeleteText() Dim rngFirstParagraph As Range Set rngFirstParagraph = ActiveDocument.Paragraphs(1).Range With rngFirstParagraph .Delete .InsertAfter Text:="New text" .InsertParagraphAfter End With End Sub Word VBA教程:查找并替换文字或格式通过Find 和Replacement对象可实现查找和替换功能。Selection 和Range对象可以使用 Find对象。从 Selection 或 Range对象访问 Find对象时,查找操作会略有不同。 查找并选定文字
如果从 Selection对象访问 Find对象,当找到搜索条件时,就会更改所选内容。下列示例选定下一个出现的“Hello”。如果到达文档结尾时仍未找到“Hello”,则停止搜索。
Find对象包含与“查找和替换”对话框中的选项相关的属性(在“编辑”菜单上选择“查找”可显示该对话框)。可以设置 Find对象单独的属性或使用Execute方法的参数,如下例所示。
查找文字,但不更改所选内容
如果从 Range对象访问 Find对象,则找到搜索条件时,不更改所选内容,但是会重新定义 Range对象。下列示例在活动文档中查找第一个出现的“blue”。如果找到该单词,则重新定义该区域,并将加粗格式应用于单词“blue”。
下列示例使用 Execute方法的参数,执行结果与上例相同。
使用 Replacement对象
Replacement对象代表查找和替换操作的替换条件。Replacement对象的属性和方法对应于“查找和替换”对话框中的选项(单击“编辑”菜单中的“查找”或“替换”命令可显示该对话框)。 可通过 Find对象使用 Replacement对象。下列示例将所有单词“hi”替换为“hello”。由于 Find对象是通过 Selection对象访问的,所以当找到搜索条件时,会更改所选内容。
下列示例取消活动文档中的加粗格式。Find对象的Bold属性为 True,而 Replacement对象的该属性为 False。若要查找并替换格式,可将查找和替换文字设为空字符串 (""),并将 Execute方法的 Format参数设为 True。由于从 Range对象访问 Find对象,所选内容将保持不变(Content属性返回一个 Range对象)。
Word VBA教程:杂项任务 本主题包含下列任务的 Visual Basic 示例: View对象包含与窗口或窗格的视图属性相关的属性和方法(全部显示、域底纹、表格网格线等)。下列示例将视图更改为页面视图。 Sub ChangeView() ActiveDocument.ActiveWindow.View.Type = wdPrintView End Sub 由 Headers、Footers 和 HeaderFooter属性返回HeaderFooter对象。下列示例更改当前页眉中的文字。 Sub AddHeaderText() With ActiveDocument.ActiveWindow.View .SeekView = wdSeekCurrentPageHeader Selection.HeaderFooter.Range.Text = "Header text" .SeekView = wdSeekMainDocument End With End Sub 该示例创建一个 Range对象 (rngFooter),该对象引用活动文档中第一节的主页脚。设置 Range对象之后,删除现有的页脚文字,并在页脚中添加 FILENAME 域、两个制表符和 AUTHOR 域。 Sub AddFooterText() Dim rngFooter As Range Set rngFooter = ActiveDocument.Sections(1) _ .Footers(wdHeaderFooterPrimary).Range With rngFooter .Delete .InsertAfter Text:=vbTab & vbTab .Collapse Direction:=wdCollapseStart End With End Sub Options对象包含的属性对应于“工具”菜单的“选项”对话框中的各项。下列示例设置 Word 的三个应用程序选项。 Sub SetOptions() With Options .AllowDragAndDrop = True .ConfirmConversions = False .MeasurementUnit = wdPoints End With End Sub PageSetup 包含文档的所有页面设置属性(左边距、下边距、纸张大小等),并作为其自身的属性。下列示例设置活动文档的页边距。 Sub ChangeDocumentLayout() With ActiveDocument.PageSetup .LeftMargin = InchesToPoints(0.75) .RightMargin = InchesToPoints(0.75) .TopMargin = InchesToPoints(1.5) .BottomMargin = InchesToPoints(1) End With End Sub 本示例循环遍历活动文档中的所有段落。如果某段落的段前间距为 6 磅,则本示例将该段前间距更改为 12 磅。 Sub LoopParagraphs() Dim parCount As Paragraph For Each parCount In ActiveDocument.Paragraphs If parCount.SpaceBefore = 12 Then parCount.SpaceBefore = 6 Next parCount End Sub 详细内容,请参阅循环遍历一个集合。 CommandBar对象同时代表菜单和工具栏。可使用菜单或工具栏名称的CommandBars属性返回单独的 CommandBar对象。Controls属性返回一个CommandBarControls对象,该对象引用指定命令栏上的项。下列示例将“字数统计”命令添加至“常用”菜单。 Sub AddToolbarItem() Dim btnNew As CommandBarButton CustomizationContext = NormalTemplate Set btnNew = CommandBars("Standard").Controls.Add _ (Type:=msoControlButton, ID:=792, Before:=6) With btnNew .BeginGroup = True .FaceId = 700 .TooltipText = "Word Count" End With End Sub 下列示例将“双下划线”命令添至“格式”工具栏。 Sub AddDoubleUnderlineButton() CustomizationContext = NormalTemplate CommandBars("Formatting").Controls.Add _ Type:=msoControlButton, ID:=60, Before:=7 End Sub 打开宏录制器,并自定义一个菜单或工具栏,以确定某个命令的 ID 值(例如,ID 60 是 “双下划线”命令)。 Word VBA教程:处理表格 本主题包含与下列任务相关的 Visual Basic 示例: 下列示例在活动文档的开头插入一张 4 列 3 行的表格。For Each...Next 结构用于循环遍历表格中的每个单元格。在 For Each...Next 结构中,InsertAfter方法用于将文字添至表格单元格(单元格 1、单元格 2、以此类推)。 Sub CreateNewTable() Dim docActive As Document Dim tblNew As Table Dim celTable As Cell Dim intCount As Integer Set docActive = ActiveDocument Set tblNew = docActive.Tables.Add( _ Range:=docActive.Range(Start:=0, End:=0), NumRows:=3, _ NumColumns:=4) intCount = 1 For Each celTable In tblNew.Range.Cells celTable.Range.InsertAfter "Cell " & intCount intCount = intCount + 1 Next celTable tblNew.AutoFormat Format:=wdTableFormatColorful2, _ ApplyBorders:=True, ApplyFont:=True, ApplyColor:=True End Sub 在表格单元格中插入文字 下列示例在活动文档中第一张表格的第一个单元格中插入文字。Cell方法返回单独的 Cell对象。Range属性返回一个 Range对象。Delete方法用于删除现有的文字,而InsertAfter方法用于插入文字“Cell 1,1”。 Sub InsertTextInCell() If ActiveDocument.Tables.Count >= 1 Then With ActiveDocument.Tables(1).Cell(Row:=1, Column:=1).Range .Delete .InsertAfter Text:="Cell 1,1" End With End If End Sub 下列示例返回并显示文档中第一张表格的第一行中每个单元格的内容。 Sub ReturnTableText() Dim tblOne As Table Dim celTable As Cell Dim rngTable As Range Set tblOne = ActiveDocument.Tables(1) For Each celTable In tblOne.Rows(1).Cells Set rngTable = ActiveDocument.Range(Start:=celTable.Range.Start, _ End:=celTable.Range.End - 1) MsgBox rngTable.Text Next celTable End Sub Sub ReturnCellText() Dim tblOne As Table Dim celTable As Cell Dim rngTable As Range Set tblOne = ActiveDocument.Tables(1) For Each celTable In tblOne.Rows(1).Cells Set rngTable = celTable.Range rngTable.MoveEnd Unit:=wdCharacter, Count:=-1 MsgBox rngTable.Text Next celTable End Sub 下列示例在活动文档的开头插入用制表符分隔的文本,然后将这些文本转换为表格。 Sub ConvertExistingText() With Documents.Add.Content .InsertBefore "one" & vbTab & "two" & vbTab & "three" & vbCr .ConvertToTable Separator:=Chr(9), NumRows:=1, NumColumns:=3 End With End Sub 下列示例定义一个数组,该数组的元素个数等于文档中第一张表格(假定为 Option Base 1)中的单元格数。For Each...Next 结构用于返回每个表格单元格的内容,并将文字指定给相应的数组元素。 Sub ReturnCellContentsToArray() Dim intCells As Integer Dim celTable As Cell Dim strCells() As String Dim intCount As Integer Dim rngText As Range If ActiveDocument.Tables.Count >= 1 Then With ActiveDocument.Tables(1).Range intCells = .Cells.Count ReDim strCells(intCells) intCount = 1 For Each celTable In .Cells Set rngText = celTable.Range rngText.MoveEnd Unit:=wdCharacter, Count:=-1 strCells(intCount) = rngText intCount = intCount + 1 Next celTable End With End If End Sub 本示例将当前文档中的表格复制到新文档中。 Sub CopyTablesToNewDoc() Dim docOld As Document Dim rngDoc As Range Dim tblDoc As Table If ActiveDocument.Tables.Count >= 1 Then Set docOld = ActiveDocument Set rngDoc = Documents.Add.Range(Start:=0, End:=0) For Each tblDoc In docOld.Tables tblDoc.Range.Copy With rngDoc .Paste .Collapse Direction:=wdCollapseEnd .InsertParagraphAfter .Collapse Direction:=wdCollapseEnd End With Next End If End Sub Word VBA教程:处理 Document对象 在 Visual Basic 中,可使用Document对象或Documents集合对象的方法来修改文件。本主题包含与下列任务相关的 Visual Basic 示例: 新建文档 Documents集合包含所有打开的文档。若要新建文档,可使用Add方法将一个 Document对象添至 Documents集合。下列指令新建一篇文档。 Documents.Add 新建文档更好的方法是将返回值赋给一个对象变量。Add方法返回一个引用新文档的 Document对象。在下列示例中,将 Add方法返回的 Document对象赋给一个对象变量。然后设置该 Document对象的部分属性和方法。使用对象变量可以很容易地控制新文档。 Sub NewSampleDoc() Dim docNew As Document Set docNew = Documents.Add With docNew .Content.Font.Name = "Tahoma" .SaveAs FileName:="Sample.doc" End With End Sub 若要打开现有的文档,可使用 Documents集合的Open方法。下列指令打开 MyFolder 文件夹中名为 MyDocument.doc 的文档。 Sub OpenDocument() Documents.Open FileName:="C:\MyFolder\Sample.doc" End Sub 若要保存一篇文档,可使用 Document对象的Save方法。下列指令保存名为 Sales.doc 的文档。 Sub SaveDocument() Documents("Sales.doc").Save End Sub 通过对 Documents集合应用 Save方法,可以保存所有打开的文档。下列指令保存所有打开的文档。 Sub SaveAllOpenDocuments() Documents.Save End Sub 若要保存一篇文档,可使用 Document对象的SaveAs方法。下列指令在当前文件夹中保存活动文档,命名为“Temp.doc”。 Sub SaveNewDocument() ActiveDocument.SaveAs FileName:="Temp.doc" End Sub FileName参数可以仅包含文件名,也可以包含完整的路径(例如,“C:\Documents\Temporary File.doc”)。 关闭文档 若要关闭一篇文档,可使用 Document对象的Close方法。下列指令关闭并保存名为 Sales.doc 的文档。 Sub CloseDocument() Documents("Sales.doc").Close SaveChanges:=wdSaveChanges End Sub 通过应用 Documents集合的 Close方法可关闭所有打开的文档。下列指令在不保存更改的情况下关闭所有的文档。 Sub CloseAllDocuments() Documents.Close SaveChanges:=wdDoNotSaveChanges End Sub 下列示例在文档关闭以前提示用户保存文档。 Sub PromptToSaveAndClose() Dim doc As Document For Each doc In Documents doc.Close SaveChanges:=wdPromptToSaveChanges Next End Sub 若要更改活动文档,可使用 Document对象的Activate方法。下列指令激活已打开的名为 Sales.doc 的文档。 Sub ActivateDocument() Documents("Sales.doc").Activate End Sub 确定文档是否已打开 若要确定文档是否处于打开状态,可使用 For Each...Next 语句列举 Documents集合中的元素。如果文档 Sample.doc 是打开的,则下列示例激活该文档,如果没有打开文档,则将该文档打开。 Sub ActivateOrOpenDocument() Dim doc As Document Dim docFound As Boolean For Each doc In Documents If InStr(1, doc.Name, "sample.doc", 1) Then doc.Activate docFound = True Exit For Else docFound = False End If Next doc If docFound = False Then Documents.Open FileName:="Sample.doc" End Sub 与通过名称或索引序号引用文档不同(例如Documents("Sales.doc")),ActiveDocument属性返回一个引用活动文档(具有焦点的文档)的 Document对象。下列示例显示活动文档的名称,或在没有打开的文档时显示一条消息。 Sub ActiveDocumentName() If Documents.Count >= 1 Then MsgBox ActiveDocument.Name Else MsgBox "No documents are open" End If End Sub Word VBA教程:将文本插入文档使用InsertAfter 或InsertBefore方法在Selection 或Range对象之前或之后插入文字。下列示例在活动文档的末尾插入文字。
下列示例在所选内容之前插入文字。
Range对象或 Selection对象在使用了 InsertBefore 或 InsertAfter方法之后,会扩展并包含新的文本。使用Collapse方法可以将 Selection 或 Range 折叠到开始或结束位置。 Word VBA教程:选定文档中的文本可使用Select方法选定文档中的对象。Select方法可用于多种对象,例如Bookmark、Field、Range 和Table对象。下列示例选定活动文档中的第一个表格。
下列示例选定活动文档中的第一个域。
下列示例选定活动文档中的前四个段落。Range方法用于创建一个引用前四个段落的 Range对象,然后将 Select方法应用于 Range对象。
详细内容,请参阅处理 Selection对象。 Word VBA教程:编辑文字 本主题包含与下列任务相关的 Visual Basic 示例: 有关其他编辑任务的信息和示例,请参阅下列主题: 确定文本是否被选定 Selection对象的Type属性返回所选内容类型的信息。如果所选内容为插入点,则下列示例显示一条消息。 Sub IsTextSelected() If Selection.Type = wdSelectionIP Then MsgBox "Nothing is selected" End Sub 折叠所选内容或区域 使用Collapse方法可将 Selection 或Range对象折叠到开始或结束点的位置。下列示例在所选内容的开头将所选内容折叠为一个插入点。 Sub CollapseToBeginning() Selection.Collapse Direction:=wdCollapseStart End Sub 下列示例将区域折叠至其结束点(在第一个单词之后),并添加新文本。 Sub CollapseToEnd() Dim rngWords As Range Set rngWords = ActiveDocument.Words(1) With rngWords .Collapse Direction:=wdCollapseEnd .Text = "(This is a test.) " End With End Sub 扩展所选内容或区域 下列示例使用MoveEnd方法扩展所选内容的结尾以包含三个附加的单词。MoveLeft、MoveRight、MoveUp 和MoveDown方法也可以用于扩展 Selection对象。 Sub ExtendSelection() Selection.MoveEnd Unit:=wdWord, Count:=3 End Sub 下列示例使用 MoveEnd方法扩展区域,以包含活动文档中的前三个段落。 Sub ExtendRange() Dim rngParagraphs As Range Set rngParagraphs = ActiveDocument.Paragraphs(1).Range rngParagraphs.MoveEnd Unit:=wdParagraph, Count:=2 End Sub 重新定义 Range对象 使用SetRange方法可重新定义现有的 Range对象。有关详细信息,请参阅处理 Range对象。 更改文字 通过更改某一区域中的内容可更改现有的文字。下列指令通过将Text属性设为“The”来更改活动文档中的第一个单词。 Sub ChangeText() ActiveDocument.Words(1).Text = "The " End Sub 也可以使用Delete方法删除现有文本,然后使用InsertAfter 或InsertBefore方法插入新文本。下列示例删除活动文档的第一段,并插入新文本。 Sub DeleteText() Dim rngFirstParagraph As Range Set rngFirstParagraph = ActiveDocument.Paragraphs(1).Range With rngFirstParagraph .Delete .InsertAfter Text:="New text" .InsertParagraphAfter End With End Sub Word VBA教程:将格式应用于文本 本主题包含与下列任务相关的 Visual Basic 示例: 将格式应用于选定内容 下列示例使用Selection属性将字符和段落格式应用于选定文本。使用Font属性获得字体格式的属性和方法,使用ParagraphFormat属性获得段落格式的属性和方法。 Sub FormatSelection() With Selection.Font .Name = "Times New Roman" .Size = 14 .AllCaps = True End With With Selection.ParagraphFormat .LeftIndent = InchesToPoints(0.5) .Space1 End With End Sub 将格式应用于某一区域 下列示例定义了一个Range对象,它引用了活动文档的前三个段落。通过应用Font 和ParagraphFormat对象的属性来设置 Range对象的格式。 Sub FormatRange() Dim rngFormat As Range Set rngFormat = ActiveDocument.Range( _ Start:=ActiveDocument.Paragraphs(1).Range.Start, _ End:=ActiveDocument.Paragraphs(3).Range.End) With rngFormat .Font.Name = "Arial" .ParagraphFormat.Alignment = wdAlignParagraphJustify End With End Sub 插入文字并应用字符和段落格式 下列示例在当前文档的上部添加单词 Title。第一段居中对齐,并在该段落之后添加半英寸的间距。将单词 Title 的格式设为 24 磅 Arial 字体。 Sub InsertFormatText() Dim rngFormat As Range Set rngFormat = ActiveDocument.Range(Start:=0, End:=0) With rngFormat .InsertAfter Text:="Title" .InsertParagraphAfter With .Font .Name = "Tahoma" .Size = 24 .Bold = True End With End With With ActiveDocument.Paragraphs(1) .Alignment = wdAlignParagraphCenter .SpaceAfter = InchesToPoints(0.5) End With End Sub 在 12 磅和无之间切换段前间距 下列示例切换选定内容中第一段的段前间距。宏将获取当前段前间距的值,如果该值为 12 磅,则删除段前间距格式(将SpaceBefore属性设为零)。如果段前间距的值为除 12 外的其它数值,则将 SpaceBefore属性设为 12 磅。 Sub ToggleParagraphSpace() With Selection.Paragraphs(1) If .SpaceBefore <> 0 Then .SpaceBefore = 0 Else .SpaceBefore = 6 End If End With End Sub 切换加粗格式 下列示例切换选定文本的加粗格式。 Sub ToggleBold() Selection.Font.Bold = wdToggle End Sub 将左边距增加 0.5 英寸 下列示例将左边距和右边距增加 0.5 英寸。PageSetup对象包含文档的所有的页面设置属性(左边距、下边距、纸张大小等)。LeftMargin属性用于返回和设置左边距设置。RightMargin属性用于返回和设置右边距设置。 Sub FormatMargins() With ActiveDocument.PageSetup .LeftMargin = .LeftMargin + InchesToPoints(0.5) .RightMargin = .RightMargin + InchesToPoints(0.5) End With End Sub Word VBA教程:查找并替换文字或格式通过Find 和Replacement对象可实现查找和替换功能。Selection 和Range对象可以使用 Find对象。从 Selection 或 Range对象访问 Find对象时,查找操作会略有不同。 查找并选定文字
如果从 Selection对象访问 Find对象,当找到搜索条件时,就会更改所选内容。下列示例选定下一个出现的“Hello”。如果到达文档结尾时仍未找到“Hello”,则停止搜索。
Find对象包含与“查找和替换”对话框中的选项相关的属性(在“编辑”菜单上选择“查找”可显示该对话框)。可以设置 Find对象单独的属性或使用Execute方法的参数,如下例所示。
查找文字,但不更改所选内容
如果从 Range对象访问 Find对象,则找到搜索条件时,不更改所选内容,但是会重新定义 Range对象。下列示例在活动文档中查找第一个出现的“blue”。如果找到该单词,则重新定义该区域,并将加粗格式应用于单词“blue”。
下列示例使用 Execute方法的参数,执行结果与上例相同。
使用 Replacement对象
Replacement对象代表查找和替换操作的替换条件。Replacement对象的属性和方法对应于“查找和替换”对话框中的选项(单击“编辑”菜单中的“查找”或“替换”命令可显示该对话框)。 可通过 Find对象使用 Replacement对象。下列示例将所有单词“hi”替换为“hello”。由于 Find对象是通过 Selection对象访问的,所以当找到搜索条件时,会更改所选内容。
下列示例取消活动文档中的加粗格式。Find对象的Bold属性为 True,而 Replacement对象的该属性为 False。若要查找并替换格式,可将查找和替换文字设为空字符串 (""),并将 Execute方法的 Format参数设为 True。由于从 Range对象访问 Find对象,所选内容将保持不变(Content属性返回一个 Range对象)。
Word VBA教程:从文档返回文本使用Text属性可以返回 Range 或 Selection对象中的文本。下列示例选定下一个格式设为“标题 1”样式的段落。然后通过 MsgBox函数显示 Text属性的内容。
下列指令返回并显示选定的文本。
下列示例返回活动文档中的第一个单词。Words集合中的每一项是代表一个单词的Range对象。
下列示例返回与活动文档中第一个书签相关联的文本。
Word VBA教程:将 Range对象赋给变量有多种方法将现有的Range对象赋给变量。本主题对两种不同的方法进行了阐述。在下列示例中,将 Range对象赋给变量
将一个 Range对象变量设置为等于另一个 Range对象变量
下列指令将名为
现在两个变量代表同一区域。修改 请注意,以下指令等价于
使用 Duplicate属性
下列指令创建一个 Range对象的新副本
对 Word VBA教程:修改文档的某一部分 Visual Basic 包含一些对象,可用这些对象修改下列文档元素:字符、单词、句子、段落和节。下表包含与这些文档元素相对应的属性和这些属性返回的对象。
如果使用这些属性时不带索引序号,则返回一个具有相同名称的集合对象。例如,Paragraphs属性返回Paragraphs集合对象。但是如果通过索引序号识别集合中的一项,则返回上表中第二列中的对象。例如,Words(1) 返回一个 Range对象。有了一个 Range对象之后,可以使用任何区域属性或方法修改该 Range对象。例如,下列指令将所选内容的第一个单词复制到“剪贴板”。 Sub CopyWord() Selection.Words(1).Copy End Sub 注意 Paragraphs 和Sections集合中的项是该集合的单个成员,而不是 Range对象。但是(返回 Range对象的)Range属性对 Paragraph 和 Section对象都可用。例如,下列指令将活动文档的第一段复制到“剪贴板”。 Sub CopyParagraph() ActiveDocument.Paragraphs(1).Range.Copy End Sub 上述表格中的所有文档元素属性对 Document、Selection 和 Range对象都可用。下列示例阐明了如何使用Document、Selection 和 Range对象的这些属性。 下列示例设置活动文档中第一个单词的大小写。 Sub ChangeCase() ActiveDocument.Words(1).Case = wdUpperCase End Sub 下列示例将当前节的下边距设为 0.5 英寸。 Sub ChangeSectionMargin() Selection.Sections(1).PageSetup.BottomMargin = InchesToPoints(0.5) End Sub 下列示例将活动文档的字符间距设为两倍(Content属性返回一个 Range对象)。 Sub DoubleSpaceDocument() ActiveDocument.Content.ParagraphFormat.Space2 End Sub 修改一组文档元素 若要修改由一组文档元素(字符、单词、句子、段落或节)组成的某区域的文字,需要创建一个 Range对象。Range方法根据开始和结束位置可创建 Range对象。例如,下列指令创建一个 Range对象,该对象引用活动文档的前十个字符。 Sub SetRangeForFirstTenCharacters() Dim rngTenCharacters As Range Set rngTenCharacters = ActiveDocument.Range(Start:=0, End:=10) End Sub 使用 Range对象的Start 和End属性可创建一个新的 Range对象,该对象引用一组文档元素。例如,下列指令创建一个引用活动文档中前三个单词的 Range对象 (myRange)。 Sub SetRangeForFirstThreeWords() Dim docActive As Document Dim rngThreeWords As Range Set docActive = ActiveDocument Set rngThreeWords = docActive.Range(Start:=docActive.Words(1).Start, _ End:=docActive.Words(3).End) End Sub 下列示例创建一个 Range对象(aRange),该对象从第二段的开头开始,在第三段之后结束。 Sub SetParagraphRange() Dim docActive As Document Dim rngParagraphs As Range Set docActive = ActiveDocument Set rngParagraphs = docActive.Range(Start:=docActive.Paragraphs(2).Range.Start, _ End:=docActive.Paragraphs(3).Range.End) End Sub 有关定义 Range对象的详细信息,请参阅处理 Range对象。 Word VBA教程:引用活动文档元素要引用活动的段落、表格、域或其他文档元素,可使用Selection属性返回一个Selection对象。通过 Selection对象,可访问选定内容中的所有段落或第一段。下列示例将边框应用于选定内容的第一段。
下列示例将边框应用于选定内容中的每一个段落。
下列示例将底纹应用于选定内容中第一张表格的首行。
如果选定的内容不包含表格,将导致出错。可使用Count属性判定选定内容中是否包含表格。下列示例将底纹应用于选定内容中第一张表格的首行。
下列示例将底纹应用于选定内容中每张表格的首行。For Each...Next 循环用于在选定内容的每张表格中循环。
Word VBA教程:使用 Application对象事件 若要创建Application对象事件的事件处理器,需要完成下列三个步骤: 在为 Application对象事件编写过程之前,必须创建新的类模块并声明一个包含事件的 Application 类型对象。例如,假定已创建新的类模块并命名为 EventClassModule。该类模块包含下列代码: Public WithEvents App As Word.Application 定义了包含事件的新对象后,它将出现在类模块的“对象”下拉列表框中,然后可为新对象编写事件过程。(在“对象”框中选定新对象后,用于该对象的有效事件将出现在“过程”下拉列表框中)从“过程”下拉列表框中选择一个事件,在类模块中会增加一空过程。 Private Sub App_DocumentChange() End Sub 在运行过程之前,必须将类模块中已声明的对象(本例中为 App)连接到 Application对象。您可在任何模块中使用下列代码: Dim X As New EventClassModule Sub Register_Event_Handler() Set X.App = Word.Application End Sub 运行 Register_Event_Handler 过程。运行该过程后,类模块中的 App对象指向 Microsoft Word Application对象,当事件发生时,将运行类模块中的事件过程。 Word VBA教程:使用 Document对象的事件 Document对象支持三种事件:Close、New 和 Open。若要在名为“ThisDocument”的类模块中编写响应这些事件的过程。可用下列步骤创建事件过程。
类模块中即增加了一个空子程序。
下例显示了 Normal 工程中的一个New事件过程,它在新建一个基于 Normal 模板的文档时运行。 Private Sub Document_New() MsgBox "New document was created" End Sub 下例显示了文档工程中的Close事件过程,该过程只在该文档关闭时运行。 Private Sub Document_Close() MsgBox "Closing the document" End Sub 与自动宏不同,Normal 模板中的事件过程没有全局区。例如,Normal 模板中的事件过程只有在附加模板为 Normal 模板时才发生。 如果文档及其附加模板中存在自动宏,则仅运行保存在文档中的自动宏。如果文档及其附加模板中都存在文档事件过程,则两个事件过程都会运行。 说明 有关创建Application对象事件过程的详细信息,请参阅使用 Application对象事件。 Word VBA教程:使用 Application对象事件 若要创建Application对象事件的事件处理器,需要完成下列三个步骤: 声明对象变量 在为 Application对象事件编写过程之前,必须创建新的类模块并声明一个包含事件的 Application 类型对象。例如,假定已创建新的类模块并命名为 EventClassModule。该类模块包含下列代码: Public WithEvents App As Word.Application 编写事件过程 定义了包含事件的新对象后,它将出现在类模块的“对象”下拉列表框中,然后可为新对象编写事件过程。(在“对象”框中选定新对象后,用于该对象的有效事件将出现在“过程”下拉列表框中)从“过程”下拉列表框中选择一个事件,在类模块中会增加一空过程。 Private Sub App_DocumentChange() End Sub 初始化已声明的对象 在运行过程之前,必须将类模块中已声明的对象(本例中为 App)连接到 Application对象。您可在任何模块中使用下列代码: Dim X As New EventClassModule Sub Register_Event_Handler() Set X.App = Word.Application End Sub 运行 Register_Event_Handler 过程。运行该过程后,类模块中的 App对象指向 Microsoft Word Application对象,当事件发生时,将运行类模块中的事件过程。 Word VBA教程:使用 Document对象的事件 Document对象支持三种事件:Close、New 和 Open。若要在名为“ThisDocument”的类模块中编写响应这些事件的过程。可用下列步骤创建事件过程。
类模块中即增加了一个空子程序。
下例显示了 Normal 工程中的一个New事件过程,它在新建一个基于 Normal 模板的文档时运行。 Private Sub Document_New() MsgBox "New document was created" End Sub 下例显示了文档工程中的Close事件过程,该过程只在该文档关闭时运行。 Private Sub Document_Close() MsgBox "Closing the document" End Sub 与自动宏不同,Normal 模板中的事件过程没有全局区。例如,Normal 模板中的事件过程只有在附加模板为 Normal 模板时才发生。 如果文档及其附加模板中存在自动宏,则仅运行保存在文档中的自动宏。如果文档及其附加模板中都存在文档事件过程,则两个事件过程都会运行。 说明 有关创建Application对象事件过程的详细信息,请参阅使用 Application对象事件。 Word VBA教程:使用 ActiveX 控件事件 Microsoft Word 文档可包含 ActiveX 控件。可用“控件工具箱”插入诸如命令按钮、复选框和列表框等 ActiveX 控件。可使用下列步骤添加具有 LostFocus事件的 ActiveX 复选框控件:
活动文档中即插入一个复选框控件。
Word 会切换至“Visual Basic 编辑器”并显示 ThisDocument 类模块,并在“对象”下拉列表框中选定该复选框。
在类模块中会添加一个空过程。
下列示例显示在焦点离开 CheckBox1 时运行的 LostFocus事件过程。该宏用Value属性显示 CheckBox1 的状态(True 为选定,False 为清除)。 Private Sub CheckBox1_LostFocus() MsgBox CheckBox1.Value End Sub 若要查看事件过程的运行情况,可切换回包含该复选框的 Word 文档。单击“控件工具箱”上的“退出设计模式”按钮。选定或清除复选框,然后单击文档中的其他元素。此时复选框失去焦点,LostFocus 过程开始运行;Word 会显示一个消息框,内容为 True 或 False。 Word 在 Word 文档中为 ActiveX 控件应用了 LostFocus 和 GotFocus事件。“过程”下拉列表框中列出的其他事件在“Microsoft 窗体帮助”中有文档说明。 Word VBA教程:通过录制宏生成代码 如果无法确定要使用的 Visual Basic方法或属性,可打开宏录制器并进行手动操作。宏录制器会将操作译成 Visual Basic 代码。录制操作完成后,可根据需要修改代码。例如,如果无法确定实现段落缩进的属性或方法,可执行下列操作:
查看 Visual Basic 代码来确定对应于段落左缩进的属性(LeftIndent属性)。将插入点置于LeftIndent 之中,并按 F1 或单击“帮助”按钮。在帮助主题中,可以查看示例以及支持 LeftIndent属性的对象(单击“应用于”)。 说明 录制的宏使用Selection属性返回Selection对象。例如,下列指令将所选段落缩进 0.5 英寸。 Sub IndentParagraph() Selection.ParagraphFormat.LeftIndent = InchesToPoints(0.5) End Sub 您也可以修改录制的宏并与Range对象一起使用。相关信息,请参阅修改录制的 Visual Basic 宏。 Word VBA教程:修改录制的 Visual Basic 宏 宏录制器是查找所需的 Visual Basic方法和属性的非常方便的工具。如果不知道使用何种属性或方法,可打开宏录制器,手动执行操作。宏录制器会将操作译为 Visual Basic 代码。但录制宏具有一些限制条件。您不能录制下列内容:
若要增强宏的功能,可能需要修改录制到模块中的代码。 删除 Selection属性 使用宏录制器创建的宏取决于所选内容。在大多数录制的宏指令的开头,可以看到“Selection”。录制的宏使用Selection属性返回Selection对象。例如,下列示例将所选内容移动至 Temp 书签,并在书签之后插入文字。 Sub Macro1() Selection.Goto What:=wdGotoBookmark, Name:="Temp" Selection.MoveRight Unit:=wdCharacter, Count:=1 Selection.TypeText Text:="New text" End Sub 这个宏虽然可以完成任务,但是有一些缺点。首先,如果文档中没有一个名为 Temp 的书签,该宏将导致出错。其次,该宏可能不正确地移动所选内容。修改这个宏,使其不再使用 Selection对象,就可解决上述两个问题。以下就是经修改后的宏: Sub MyMacro() If ActiveDocument.Bookmarks.Exists("Temp") = True Then endloc = ActiveDocument.Bookmarks("Temp").End ActiveDocument.Range(Start:=endloc, _ End:=endloc).InsertAfter "New text" End If End Sub Exists方法用于检查是否存在名为 Temp 的书签。如果找到该书签,则用End属性返回该书签结束字符的位置。最后使用Range方法返回一个引用书签结束位置的Range对象,以使用InsertAfter方法插入文字。有关定义 Range对象的详细信息,请参阅处理 Range对象。 使用 With…End With 可使用 With…End With 结构简化引用相同对象的宏指令。例如,在文档顶部添加标题时,将录制下面的宏。 Sub Macro1() Selection.HomeKey Unit:=wdStory Selection.TypeText Text:="Title" Selection.ParagraphAlignment.Alignment = wdAlignParagraphCenter End Sub 每个指令都使用 Selection属性返回一个 Selection对象。可以简化这个宏,这样只需使用一次 Selection属性。 Sub MyMacro() With Selection .HomeKey Unit:=wdStory .TypeText Text:="Title" .ParagraphAlignment.Alignment = wdAlignParagraphCenter End With End Sub 不使用 Selection对象也可以完成相同的任务。下面的宏在活动文档的开头使用 Range对象来完成相同的任务。 Sub MyMacro() With ActiveDocument.Range(Start:=0, End:=0) .InsertAfter "Title" .ParagraphFormat.Alignment = wdAlignParagraphCenter End With End Sub 删除不必要的属性 如果录制了一个关于在对话框中选择选项的宏,即使只更改一个或两个选项,宏录制器也会记录该对话框中的所有选项的设置。如果不希望更改所有的选项,可从录制的宏中删除不必要的属性。下面录制的宏包含“段落”对话框的一些选项(单击“格式”菜单可显示该对话框)。 Sub Macro1() With Selection.ParagraphFormat .LeftIndent = InchesToPoints(0) .RightIndent = InchesToPoints(0) .SpaceBefore = 6 .SpaceAfter = 6 .LineSpacingRule = 0 .Alignment = wdAlignParagraphLeft .WidowControl = True .KeepWithNext = False .KeepTogether = False .PageBreakBefore = False .NoLineNumber = False .Hyphenation = True .FirstLineIndent = InchesToPoints(0) .OutlineLevel = 10 End With End Sub 但是,如果只需更改段前和段后间距,可将宏更改为: Sub MyMacro() With Selection.ParagraphFormat .SpaceBefore = 6 .SpaceAfter = 6 End With End Sub 因为只设置了较少的属性,所以简化后的宏运行得更快。运行结果只更改选定段落的段前和段后的间距,所有其他设置都没有改变。 删除不必要的参数 当宏录制器记录一个方法时,会包含所有参数的值。打开名为 Test.doc 的文档时,录制了下面的宏。所得到的宏包含Open方法的所有参数。 Sub Macro1() Documents.Open FileName:="C:\My Documents\Test.doc", _ ConfirmConversions:= False, ReadOnly:=False, _ AddToRecentFiles:=False, PasswordDocument:="", _ PasswordTemplate:="", Revert:=False, _ WritePasswordDocument:="", _ WritePasswordTemplate:="", Format:=wdOpenFormatAuto End Sub 可以从录制的宏中删除不需要的参数。例如,可以删除所有设置为空字符串的参数(如WritePasswordDocument:=""),如下所示。 Sub MyMacro() Documents.Open FileName:="C:\My Documents\Test.doc", _ ConfirmConversions:= False, _ ReadOnly:=False, AddToRecentFiles:=False, _ Revert:=False, Format:=wdOpenFormatAuto End Sub Word VBA教程:自动运行的宏 通过为一个宏赋予某个特殊的名称,就可在执行某项操作(例如启动 Word 或打开文档)时自动运行宏。Word 将下列名称识别为自动宏,或称“auto”宏。
当以下条件之一为真时,将识别代码模块中的自动宏。
与其他宏一样,自动宏也可以保存于 Normal 模板、其他模板或文档中。要让自动宏运行,它必须位于活动文档的 Normal 模板中,或活动文档选用的模板中。唯一例外的是 AutoExec 宏,它只有存储于以下位置时才可自动运行:Normal 模板、通过“模板和加载项”对话框全局加载的模板、或由“Startup”文件夹指定的文件夹中的全局模板。 在命名冲突的情况下(多个自动宏名相同),Word 将运行上下文中最近的自动宏。例如,如果同时在文档及其附加的模板中创建了 AutoClose 宏,则仅执行文档中的自动宏。如果在 Normal 模板中创建了 AutoNew 宏,只有当文档或其附加模板中没有名为 AutoNew 的宏时,该自动宏才能运行。 注意 按住 Shift 可以终止自动宏的运行。例如,基于包含 AutoNew 宏的模板新建文档时,按住 Shift 可终止 AutoNew 宏的运行。方法是:按住 Shift,单击(“文件”菜单)“新建”对话框中的“确定”按钮,并在显示新文档前持续按住 Shift。如果运行一个宏时有可能触发自动宏,可用下列指令终止自动宏的运行: WordBasic.DisableAutoMacros Word VBA教程:修改 Word 命令 大多数 Word 命令都可通过转换为宏的方式对其进行修改。例如,可修改“文件”菜单上的“打开”命令,使其不再显示 Word 文档文件列表(扩展名为 .doc 的文件),而显示当前文件夹中的所有文件。 若要在“宏”对话框中显示内置 Word 命令列表,可在“宏的位置”框中选定“Word 命令”。显示的命令列表中包含所有的菜单命令、工具栏命令或快捷键命令。菜单命令名称以相关的菜单名称开头。例如,“文件”菜单中的“保存”命令显示为“FileSave”。 通过将一个宏命名为与 Word 命令相同的名称,就可用宏替代 Word 命令。例如,如果创建一个名为“FileSave”的宏,当选择“文件”菜单上的“保存”命令、单击“保存”工具栏按钮,或按“保存文件”快捷键时,Word 将运行该宏。 本示例介绍了修改 FileSave 命令的步骤。
FileSave 宏显示如下: Sub FileSave() ' ' FileSave Macro ' Saves the active document or template ' ActiveDocument.Save End Sub 可添加指令或删除现有的ActiveDocument.Save 指令。之后在运行“FileSave”命令时,新的 FileSave 宏将取代 word 命令。若要恢复“FileSave”原有的功能,需重新命名新的 FileSave 宏或将之删除。 说明 也可以创建与 Word 命令同名的代码模块(例如 FileSave)并包含名为 Main 的子程序,以此替换 Word 命令。 Word VBA教程:在宏结束时存储值宏结束时,变量中的值并未自动存储在磁盘上。如果宏需要保留一个值,则必须在宏的执行操作完成以前,将该值保存在宏的外部。本主题介绍了五个易于存储和检索宏值的位置。 文档变量
文档变量允许您将宏值作为文档或模板的一部分存储。例如,可在宏驻留的文档或模板中存储宏的值。可用Variables集合的Add方法向文档或模板添加变量。下列示例用 ThisDocument属性将文档变量保存于运行宏的相同位置(文档或模板)。
下列示例用Variable对象的Value属性返回文档变量的值。
说明
可用 DOCVARIABLE 域将文档变量插入文档。 文档属性
与文档变量相同,文档属性允许将值作为文档或模板的一部分存储。可在的“属性”对话框中查看文档属性(单击“文件”菜单上的“属性”可显示该对话框)。 Word对象模块将文档属性分为两组:内置的和自定义的。自定义文档属性包括“属性”对话框中“自定义”选项卡上显示的属性。内置文档属性包括“属性”对话框中除“自定义”选项卡以外的所有选项卡上的属性。 若要访问内置属性,可使用BuiltInDocumentProperties属性返回一个包含内置文档属性的DocumentProperties集合。使用CustomDocumentProperties属性返回一个包含自定义文档属性的 DocumentProperties集合。下列示例在运行的宏所在的相同位置(文档或模板)创建一个名为“YourName”的自定义文档属性。
内置文档属性不能添至 BuiltInDocumentProperties属性返回的 DocumentProperties集合中。但是可检索内置文档属性的内容或更改可读/写的内置文档属性的值。 说明
可用 DOCPROPERTY 域将文档属性插入文档中。 “自动图文集”词条
“自动图文集”词条可用于在模板中存储信息。与文档变量或属性不同,“自动图文集”词条可包含除宏变量以外的其他条目,例如带格式文本或图形。可使用AutoTextEntries集合的Add方法创建新的“自动图文集”词条。下列示例创建一个包含所选内容的名为“MyText”的“自动图文集”词条。如果下列指令是模板宏的一部分,则新的“自动图文集”词条将存储在模板中;否则,“自动图文集”词条将存储在驻留指令的文档附加模板中。
使用AutoTextEntry对象的Value属性可检索“自动图文集”词条对象的内容。 设置文件
可使用PrivateProfileString属性从设置文件中检索信息并进行设置。Windows 设置文件的结构与 Windows 3.1 的 WIN.INI 文件相同。下列示例将 Macro.ini 文件中 DocTracker 节下的 DocNum 键设为 1。
运行上述指令后,Macro.ini 文件包含下列文本:
PrivateProfileString属性有三个参数:FileName、Section 和 Key。FileName参数用于指定设置文件的路径和文件名。Section参数指定出现在相关的键前面的括号之间的节的名称(不包括节名的括号)。Key参数指定其后跟随等号 (=) 的键名和设置。 使用相同的 PrivateProfileString 属性可从设置文件中检索设置。下列示例检索 Macro.ini 文件中 DocTracker 节下的 DocNum 设置。
Windows 注册表
可使用PrivateProfileString属性设置和检索 Windows 注册表中的信息。下列示例从 Windows 注册表中检索 Microsoft Word 2002 程序目录。
PrivateProfileString属性有三个参数:FileName、Section 和 Key。若要返回或设置注册表项的值,应将 FileName参数指定为空字符串 ("")。Section参数应为注册表子键的完整路径。Key参数应为 Section 指定的子键中项的名称。 也可用下列 PrivateProfileString 语法在 Windows 注册表中设置信息。 System.PrivateProfileString(FileName, Section, Key) = value 下列示例将 Windows 注册表中 Word 2002 的 Option 子键的 DOC-PATH 项设为“C:\My Documents”。
|
|