WORD·VBA入门教程(第四课)

2019-01-07 17:26

第四课:WORD中的Range对象

在操纵Word VBA,绝大多数是针对Word中的各视图中的文本进行的,正确掌握、理解和应用Word Range是Word Vba的重要一课,初学者甚至熟悉Excel的编程人员,往往对Word 中的Range对象手足无措,原因是不了解Word中Range对象的本质和意义。 1. Range 对象的定义:

该对象代表文档中的一个连续范围。每一个 Range 对象由一起始和一终止字符位置定义。和文档中书签的使用方法类似,Visual Basic 使用 Range 对象识别文档的指定部分。但和书签不同,Range 对象只在定义该对象的过程正在运行时才存在。

Range 对象和所选内容相互独立。也就是说,可定义和复制一个范围而不需改变所选内容。还可在文档中定义多个范围,但每一个窗格中只能有一个所选内容。

透彻的理解,只要是以文本形式存在的区域,就有Range对象,无论是页眉页脚中,批注脚注中,还是图形的文本框中,无论是一个光标,一个字符、一个词、一个句子、一个段落、一节还是一个文档,都可以看成是一个Range对象。 2. 对比Range对象

如果同EXCEL中的Range对象对比,你也许会更容易理解一些。

Excel中,每个单元格,是一个Range对象,连续或者非连续的单元格,都可以组成一个Range对象,它由单元格地址组成的;在Word中,每个字符是一个“单元格”,它是由每个字符(无论是否可见,如段落标记等)构成了一个文档的Range对象,尽管它存活在运行时间中,也就是凡是由字符组成的具有起点和终点位置的连续文本,哪怕起点等于终点(光标)或者终点是起点位置的下一个字符,都是一个Range对象。 而Word中的Selection对象可以理解成EXCEL中的ActiveCell对象。 3. StoryRanges对象:

StoryRanges由 Range 对象组成的集合,该集合代表文档中的文字部分。可使用 StoryRanges(index) 返回单个部分(作为一个 Range 对象),其中 index 为一个 wdStoryType 常量。

Start、End和StoryType属性唯一地确定了一个Range对象。Start和End属性分别返回或者设置Range对象的起始和结束字符的位置。每个文档构成部分起始处的字符位置是0 (zero),而第一个字符之后的位置是1,依此类推。StoryType 属性的WdStoryType常量可以表示十一种不同的文档构成部分类型,如下: wdCommentsStory wdEndnotesStory

wdEvenPagesFooterStory wdEvenPagesHeaderStory wdFirstPageFooterStory wdFirstPageHeaderStory wdFootnotesStory wdMainTextStory

wdPrimaryFooterStory wdPrimaryHeaderStory wdTextFrameStory (3) 在句子中循环

以下示例罗列出所选文本中的句子数量和结尾的标点符号。 Sub Example()

Dim i As Range, SenCount As Integer, MyString As String, EndChar As String With Selection

If .Type = wdSelectionIP Then Exit Sub

SenCount = .Sentences.Count '取得所选内容的句子数 For Each i In .Sentences '在句子中循环

'如果句子中的最后一个字符为段落标记则EndChar为段落标记的前一个字符 If i.Characters(i.Characters.Count) = Chr(13) Then EndChar = i.Characters(i.Characters.Count - 1) Else

EndChar = i.Characters(i.Characters.Count) End If

'以英文分号为分隔符,将结束标点在变量中累加 MyString = MyString & \Next

'去除最后一个\

MyString = Right(MyString, Len(MyString) - 1) End With

MsgBox \所选内容的句子数:\它们的结束标点分别为:\End Sub

(4) 在段落中循环

以下示例将本文档中的空白段落删除,并提示删除的空白段落数量。 Sub Example()

Dim Par As Paragraph, ParRange As Range, BlankCount As Integer Application.ScreenUpdating = False For Each Par In Me.Paragraphs Set ParRange = Par.Range

If Len(ParRange) = 1 Then ParRange.Delete: BlankCount = BlankCount + 1 Next

Application.ScreenUpdating = True

MsgBox \共为您删除了\个空白段落!\End Sub

(5) 表格中的Range对象

以下示例将活动文档表格1中的空白单元格填充0值。 Sub Sample()

Dim myTable As Table, oCell As Cell Set myTable = ActiveDocument.Tables(1) For Each oCell In myTable.Range.Cells

If oCell.Range.End - oCell.Range.Start = 1 Then oCell.Range = 0 Next End Sub

以下示例在表格的起始位置插入表格各单元格中的文本,然后删除表格。 Sub Sample()

Dim myTable As Table, myRange As Range, CellsString As String With ActiveDocument

Set myTable = .Tables(1)

Set myRange = .Range(myTable.Range.Start, myTable.Range.Start) CellsString = myTable.Range.Text myTable.Delete

myRange.InsertAfter CellsString End With End Sub

(6) 节中的Range对象

以下示例中统计每节的字符数(含所有可见与不可见字符),以及显示本节的结束位置。 Dim i As Section, MyRange As Range For Each i In ThisDocument.Sections

Set MyRange = ThisDocument.Range(i.Range.End - 1, i.Range.End - 1)

MsgBox \第\字符总符为:\该节结束标记位于第\MyRange.Information(wdActiveEndPageNumber) & \页中.\Next

(7) Find与Replacement中的Range 对象 以下示例在文档中向下搜索(向尾部)“狐狸”,并在其上方标注上标字体的编号。

Sub Sample()

Dim MyRange As Range, FindCount As Integer Application.ScreenUpdating = False '定义一个Range对象 GN: With ActiveDocument

If Not MyRange Is Nothing Then

Set MyRange = .Range(MyRange.End, .Content.End) Else

Set MyRange = ActiveDocument.Content End If End With

With MyRange.Find '查找

.ClearFormatting '清除查找格式 .Forward = True '向下搜索 .Text = \狐狸\搜索文本

Do While .Execute '如果能查找到 FindCount = FindCount + 1 '计数

MyRange.InsertAfter FindCount '在查找到的文本区域后插入数字 '将此数字变为上标格式

MyRange.Words(MyRange.Words.Count).Font.Superscript = True GoTo GN'转到指定的行标签处 Loop End With

Application.ScreenUpdating = True End Sub

(8) 书签中的Range对象

以下示例将活动文档中的书签对应的文本区域设置字体格式 Dim oBmk As Bookmark

For Each oBmk In ActiveDocument.Bookmarks With oBmk.Range.Font .Bold = True .Name = \宋体\.Size = 14

.Color = wdColorRed End With Next

(9) 修订中的Range对象

以下示例显示活动文档中第一个修订对象的位置

Dim StartRange As Range, EndRange As Range, MyRange As Range Set MyRange = ActiveDocument.Revisions(1).Range With MyRange

If ActiveDocument.Revisions(1).Type = wdRevisionDelete Then Set StartRange = ActiveDocument.Range(.Start, .Start)

Set EndRange = ActiveDocument.Range(.End + .Start - 2, .End + .Start - 2)

MsgBox \您第一个修订区域的起始页码为\& \您第一个修订区域的起始行号为\& \您第一个修订区域的起始列数为\& \您第一个修订区域的结束页码为\

& \您第一个修订区域的结束行号为\

& \您第一个修订区域的结束列数为\

End If End With

(10) 页眉页脚中的Range对象 Sub Example()

Dim myRange As Range

'定义一个Range对象,为活动文档第一节的页脚

Set myRange = ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range With myRange

'它将覆盖原有文本内容

.Text = \'居右

.ParagraphFormat.Alignment = wdAlignParagraphRight .Font.Name = \.Font.ColorIndex = wdBlue End With End Sub

(11) 自选图形中的Range对象

以下示例修改活动文档中第一个文本框中第三段落中的指定字符: Dim MyRange As Range, TabPostion As Integer

'定义一个Range对象,注意这是一个文本框区域的Range对象,而非DOCUMENT下的正文文字部分的Range对象 Set MyRange = ActiveDocument.StoryRanges(wdTextFrameStory).Paragraphs(3).Range '取得制表位的位置

TabPostion = VBA.InStr(MyRange, vbTab)

'重新定义该RANGE对象的起始位置和结束位置,由于要改写两个地方,因此,可以重后面先改写,这样TAB的位置不需重新计算

MyRange.SetRange MyRange.Start + TabPostion + 2, MyRange.End - 1 '改写文本内容

MyRange.Text = \

'再次定义MyRange对象(恢复)

Set MyRange = ActiveDocument.StoryRanges(wdTextFrameStory).Paragraphs(3).Range '重新定义

MyRange.SetRange MyRange.Start + 4, MyRange.Start + TabPostion - 1 '改写文本内容

MyRange.Text = \(12) Shapes中的Range方法 本示例逢单选定图形 Option Explicit

Option Base 1 '下标为1 Sub Example()

Dim i As Integer, ShapesCount As Integer, myArray() As Variant With ActiveDocument

ShapesCount = .Shapes.Count '自选图形总数 '声明一个动态一维数组

ReDim myArray(Int((ShapesCount + 1) / 2)) For i = 1 To ShapesCount Step 2 myArray((i + 1) / 2) = i '分配数组 Next

.Shapes.Range(myArray()).Select '选定图形 End With End Sub


WORD·VBA入门教程(第四课).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:东营燃气报警器批发厂家 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: