ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3311|回复: 6

[原创并分享]Word 2003 中访问页和行对象

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-7-26 11:59 | 显示全部楼层 |阅读模式

Word 2003中,新增了页对象和行对象,这比以前版本通过使用SELECT方法和SELECTION对象或者预定义书签的方法(如“\Line”、“\Page”)取得当前页或者行的方式是个明显的改进。

以下代码返回活动文档第2页文本行数量。

Sub Test()

    Dim myPage As Page

    Set myPage = Me.ActiveWindow.Panes(1).Pages(2)

    MsgBox myPage.Rectangles(1).Lines.Count

End Sub

以下代码可以逐行/逐页方式访问行对象,并返回行对象内容。

Sub Example()

    Dim P As Page

    Dim L As Line

    With ActiveDocument

        For Each P In .ActiveWindow.ActivePane.Pages

            For Each L In P.Rectangles(1).Lines

                Debug.Print L.Range.Text

            Next

        Next

    End With

End Sub

以下代码获得第2页第五段落文本。

Sub Test()

    Dim myPage As Page

    Set myPage = Me.ActiveWindow.Panes(1).Pages(2)

    MsgBox myPage.Rectangles(1).Range.Paragraphs(5).Range.Text

End Sub

以下代码在活动文档第2页的第一个图形中添加(更新)文本内容。

Sub Sample()

    Dim myShape As Shape

    Set myShape = Me.ActiveWindow.ActivePane.Pages(2) _

                  .Rectangles(2).Range.ShapeRange(1)

    myShape.TextFrame.TextRange = "Word 2003"

End Sub

TA的精华主题

TA的得分主题

发表于 2006-7-26 13:58 | 显示全部楼层

谢谢老大。上次吾也注意到这个两个对象。
   但看到了Rectangles属性时,因为说明的不直观 。所以,没看出来。
PF老大。
这个对以后的很有帮助了。

以前,大多用goto来定位。

TA的精华主题

TA的得分主题

发表于 2006-7-26 14:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

有一点向老大请教:是否所在页的第一页第一个Rectangle是所对应的页的内容,其它的文本框对应为第二个,第三个,以前类推?帮助在此说明不是很明确。是否不一定是文本框,图文框也算在内,以内部包括文字为准?

返回一个 Rectangles 集合,代表文档页面上的文字或图形部分。

expression.Rectangles

expression      必需。表达式返回值为“应用于”列表中的一个对象。

说明使用 Rectangles 集合及相关对象和属性可通过编程的方法定义文档的页面版式。矩形对应于文档页面上的文字或图形部分。

根据老大的分享,试编了二个

一个是设置每页的第二行的格式。

一个是在每页的第二行前面插入“第i页第2行”的字样

注:没有出错处理,现学现卖。呵呵。

学有在第二行前面字时,可能会跳到第一行的。若不这么处理用:
     Set arange = .ActiveWindow.Panes(1).Pages(i).Rectangles(1).Lines(2).Range
         arange.ParagraphFormat.WordWrap = False
     Set arange = .ActiveWindow.Panes(1).Pages(i).Rectangles(1).Lines(2).Rang

当然,这个是默认的处理方式。

Sub text1()
Dim apage As Page, aline As Line
Dim apnum As Long, arange As Range
Dim i As Long
With ActiveDocument
apnum = .ActiveWindow.Panes(1).Pages.Count
    For i = 1 To apnum
      Set arange = .ActiveWindow.Panes(1).Pages(i).Rectangles(1).Lines(2).Range
        With arange.Font
             .Color = wdColorBlue  '每页的第二页设置为兰色
            
        End With
    Next
End With
End Sub


Sub text2()
Dim apage As Page, aline As Line
Dim apnum As Long, arange As Range
Dim i As Long
With ActiveDocument
apnum = .ActiveWindow.Panes(1).Pages.Count
    For i = 1 To apnum
      Set arange = .ActiveWindow.Panes(1).Pages(i).Rectangles(1).Lines(2).Range
      Set arange = ActiveDocument.Range(arange.Start, arange.Start)
        arange.InsertBefore "第" & i & "页第2行"
        With arange.Font
             .Color = wdColorBlue  '设置插入的字为兰色
        End With
    Next
End With
End Sub

[此贴子已经被作者于2006-7-26 16:45:24编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-7-26 17:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

谢谢孔兄,一楼有些问题,经进一步研究如下:

我是这么理解的:

WORD的页分为文字层和图形层,这就是Rectangles集合。其中的Rectangles(0)—Rectangles(wdTextRectangle)对应于页面中的文字层(RANGE),Rectangles1-- Rectangles(wdShapeRectangle)对应于页面中的图形层。

更多的请参考:

wdLineBetweenColumnRectangle    代表分栏隔线所在的区域。 5

wdMarkupRectangle 代表批注框所占用的空间。 2

wdMarkupRectangleButton  代表省略号 (...) 所占用的空间,批注框中显示该标识符表明存在更多批注文字。   3

wdPageBorderRectangle    代表页面边框所占用的空间。  4

wdSelection   代表选择工具所占用的空间,例如表格左上角的表格选择工具或图像的作者。  6

wdShapeRectangle  代表形状所占用的空间。   1

wdSystem   不可用。   7

wdTextRectangle   代表文本所占用的空间。   0

嵌入式图片相当于文字,也就是WORD把图片从图形层移到文字层中了。而图形层根据叠放序次的不同,可以在文字上方(浮于文字上方)或者在文字下方(衬于文字下方)以及文字对图形的环绕。

图文框是特殊的图形,它是页面图形层内容,但不在SHAPESSHAPERANGE)集合中,如访问图文框时应该使用

MsgBox Me.ActiveWindow.ActivePane.Pages(1).Rectangles(2).Range.Frames.Count

至于访问的顺序,应该遵守图形约定(或者图文框)的INDEX(索引)约定,常规是先添加为1,以此类推,但每页(PAGE)中的索引,应该顺次序访问。如共2页,第1页有3个自选图形,第2页为2个自选图形,如果访问第2页的第2个(文档第5个)图形,可以使用:

Me.ActiveWindow.ActivePane.Pages(2).Rectangles(wdShapeRectangle).Range.ShapeRange(2).Select

TA的精华主题

TA的得分主题

发表于 2006-7-26 18:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

谢谢老大。学习ing.

 

[em17][em17][em17]

TA的精华主题

TA的得分主题

发表于 2012-12-17 14:27 | 显示全部楼层
本帖最后由 zhanglei1371 于 2012-12-17 20:44 编辑

老大,运行时出了问题,求解?
QQ工具栏截屏未命名.png
2.png
运行到黄色到一句就运行不下去了...
另外,上面的Me.对象在我电脑上显示无法无效关键字,该如何解决呢?

TA的精华主题

TA的得分主题

发表于 2022-1-28 17:31 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-23 07:53 , Processed in 0.042506 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表