ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

word vba 如何选择文档任意位置字符?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-7-23 00:21 | 显示全部楼层 |阅读模式
比如我要选中 某一个word文档 第二页,第三段,第10-14字符。 用vba怎么写?


求助各位大师

TA的精华主题

TA的得分主题

发表于 2019-7-23 08:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
有坑,跨页的段会word认为是第一段,不知道楼主算不算第一段

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-23 09:11 | 显示全部楼层
daibao88 发表于 2019-7-23 08:41
有坑,跨页的段会word认为是第一段,不知道楼主算不算第一段

好的,那先不跨页。   我要选中  第一页 第三段  第10-14 字符。  代码应该怎么写?

TA的精华主题

TA的得分主题

发表于 2019-7-23 13:58 | 显示全部楼层
。。。。。。。。。。。。。。。。。
  1. Sub the_Test()
  2.     Dim theSpeciefiedPageNum&, theSpeciefiedPageStart&, theSpeciefiedPageEnd&
  3.     Dim theCharactersCount&, theSpeciefiedCharactersStart&, theSpeciefiedCharactersEnd&
  4.     Dim theCharacterStart&, theCharacterEnd&, theSpeciefiedParagraphNum&
  5.     Dim theSpeciefiedPageParagraphsCount&, theDocumentPagesCount&
  6.     '
  7.     theSpeciefiedPageNum = 2 '指定的页码
  8.     theSpeciefiedParagraphNum = 3 '指定所在页的段落数
  9.     theSpeciefiedCharactersStart = 10 '指定的字符串起始字符数
  10.     theSpeciefiedCharactersEnd = 14 '指定的字符串终止字符数
  11.     theDocumentPagesCount = ActiveDocument.Range.Information(1)
  12.     With ActiveDocument
  13.         With .Content
  14.             theSpeciefiedPageStart = .GoTo(1, 1, theSpeciefiedPageNum).Start
  15.             If theSpeciefiedPageNum + 1 < theDocumentPagesCount Then
  16.                 theSpeciefiedPageEnd = .GoTo(1, 1, theSpeciefiedPageNum + 1).Start
  17.             Else
  18.                 theSpeciefiedPageEnd = .End
  19.             End If
  20.         End With
  21.         With .Range(theSpeciefiedPageStart, theSpeciefiedPageEnd)
  22.             theSpeciefiedPageParagraphsCount = .Paragraphs.Count
  23.             If theSpeciefiedParagraphNum <= theSpeciefiedPageParagraphsCount Then
  24.                 With .Paragraphs(theSpeciefiedParagraphNum).Range
  25.                     theCharactersCount = .Characters.Count
  26.                     If theSpeciefiedCharactersEnd <= theCharactersCount Then
  27.                         theCharacterStart = .Characters(theSpeciefiedCharactersStart).Start
  28.                         theCharacterEnd = .Characters(theSpeciefiedCharactersEnd).End
  29.                         ActiveDocument.Range(theCharacterStart, theCharacterEnd).Select
  30.                     End If
  31.                 End With
  32.             End If
  33.         End With
  34.     End With
  35. End Sub
复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-23 15:03 来自手机 | 显示全部楼层
gbgbxgb 发表于 2019-7-23 13:58
。。。。。。。。。。。。。。。。。

我的天,原来我这一个看起来很简单的问题,需要这么复杂的代码!大师厉害!   这个在文档编辑界面用鼠标键盘好像非常轻松就搞定的事情,用vba代码这么难。   我还以为一两句代码就完事的呢

TA的精华主题

TA的得分主题

发表于 2019-7-23 15:48 | 显示全部楼层
cydca8108 发表于 2019-7-23 15:03
我的天,原来我这一个看起来很简单的问题,需要这么复杂的代码!大师厉害!   这个在文档编辑界面用鼠标 ...

想要一句的?有:
ActiveDocument.Range(ActiveDocument.Range(ActiveDocument.Content.GoTo(1, 1, 2).Start, ActiveDocument.Content.GoTo(1, 1, 3).Start).Paragraphs(3).Range.Characters(10).Start, ActiveDocument.Range(ActiveDocument.Content.GoTo(1, 1, 2).Start, ActiveDocument.Content.GoTo(1, 1, 3).Start).Paragraphs(3).Range.Characters(14).End).Select

但它的意义呢?
不检查页的总数、不检查指定页的段落数、不检查指定的段落的字符数!

TA的精华主题

TA的得分主题

发表于 2019-7-23 15:58 | 显示全部楼层
Sub test()
    Dim myrange As Range, s As Integer, e As Integer
    ActiveDocument.Range(0, 0).Select
    Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:="2"
    Set myrange = ActiveDocument.Bookmarks("\page").Range
    Set myrange = myrange.Paragraphs(2).Range
    s = myrange.Characters(10).Start
    e = myrange.Characters(14).Start
    Set myrange = ActiveDocument.Range(s, e)
    MsgBox myrange.Text
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-23 16:11 | 显示全部楼层
gbgbxgb 发表于 2019-7-23 15:48
想要一句的?有:
ActiveDocument.Range(ActiveDocument.Range(ActiveDocument.Content.GoTo(1, 1, 2).S ...

大师严谨,我这个没啥意义,就是一项特定的工作,都固定了的,肉眼检查了文档,没问题的,干完就了事。没有通用性,没有扩展性。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-23 16:12 | 显示全部楼层
daibao88 发表于 2019-7-23 15:58
Sub test()
    Dim myrange As Range, s As Integer, e As Integer
    ActiveDocument.Range(0, 0).Sel ...

厉害!赞!   我自己捣鼓出来一个,请2位大师指点,好像也能完成题目要求

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-23 16:15 | 显示全部楼层
Sub test()

Selection.HomeKey unit:=wdStory
Selection.GoTo what:=wdGoToPage, which:=wdGoToNext, Name:=2
Selection.MoveDown unit:=wdParagraph, Count:=2
Selection.MoveRight unit:=wdCharacter, Count:=9
Selection.MoveRight unit:=wdCharacter, Count:=4, Extend:=wdExtend

End Sub

这个能行吗?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-11 06:13 , Processed in 0.026887 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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