ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

WORD中搜索特定词组并返回所在段落号

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-2-10 11:15 | 显示全部楼层 |阅读模式
如题,第一次发帖,感谢各位高手解疑释惑!{:soso_e183:}

TA的精华主题

TA的得分主题

发表于 2014-2-11 18:18 | 显示全部楼层
我个人是没找到Range所在文章的段的这个属性,所以我自己编了个函数。谁能直接引用这个属性也请教(不用任何算法)。
  1. Sub 添加特定字符段落号()
  2. Dim bFindTxt As String '要替换的字符串
  3. Dim FindTxt As String '替换的字符串
  4. Dim n%
  5. bFindTxt = InputBox("要查找的字符写在下面") '也可直接改变。不用Input
  6. On Error Resume Next
  7. Application.ScreenUpdating = False
  8. With Selection.Find
  9.     .ClearFormatting
  10.     .Text = bFindTxt
  11.     Do While .Execute = True
  12.         With Selection.Range
  13.             .Font.ColorIndex = wdRed '一定要先改属性再改字
  14.             .Font.Underline = wdUnderlineDottedHeavy
  15.             FindTxt = .Text & "【所在第" & iParaCount(Selection.Range) & "段】"
  16.             .Text = FindTxt
  17.         End With
  18.         Selection.MoveStart wdCharacter, Len(FindTxt) '这句话一定再注意一下
  19.         'n = n + 1: If n > 9 Then Exit Do
  20.     Loop
  21. End With
  22. Application.ScreenUpdating = True
  23. End Sub

  24. Function iParaCount(oRange As Range) As Integer
  25. oRange.SetRange 0, oRange.End
  26. iParaCount = oRange.Paragraphs.Count
  27. End Function
复制代码
本代码在office2010sp1下通过。

TA的精华主题

TA的得分主题

发表于 2014-2-11 20:19 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-2-11 20:41 | 显示全部楼层
loquat 发表于 2014-2-11 20:19
ActiveDocument.Range(0, oRange.End).Paragraphs.Count

也对,比我的SetRange,看上去简洁了一些。但是思路是一致的。Thanks。

TA的精华主题

TA的得分主题

发表于 2014-2-11 20:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
hellohaoyu1985 发表于 2014-2-11 20:41
也对,比我的SetRange,看上去简洁了一些。但是思路是一致的。Thanks。

个人感觉SetRange就是一个累赘,根本不需要Set就可以直接引用。不知道微软设置这个方法是做什么用的。。。

TA的精华主题

TA的得分主题

发表于 2014-2-11 23:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub 返回特定字符段落号()
  2. Dim FindTxt$, i&, j&
  3. FindTxt = InputBox("要查找的字符写在下面")
  4. With ActiveDocument
  5. For i = 1 To .Paragraphs.Count
  6.     j = InStr(1, .Paragraphs(i).Range, FindTxt, vbBinaryCompare)
  7.     If j Then Debug.Print i
  8. Next
  9. End With
  10. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2014-2-12 12:33 | 显示全部楼层
其实吧,这个题不需要VBA也能达到2楼的效果,也不需要正则。只需要查找替换,就是步骤蛋疼了点。我个认为充分展示了word替换的美学。
方法如下:
1. 在第一行的开头建立一个AutoNum的域,并把其设为“强调”格式(其它的格式也行,替换用),选中此域,Ctrl+C
2. Ctrl+H打开替换面板;查找内容:^p;替换内容:^p^c。全部替换。
3. 在第一行的末尾,再建立了一个AutoNum的域,并把其设为“明显强调”(其它格式也行,只要不和上面相同),Ctrl+C
4. Ctrl+H;查找内容:金钱(为你要查找的字符串的),替换内容为:金钱(Para:^c)(其中金钱为你要查找的字符串);并把替换格式改为字体——双下划线(红色)。全部替换。
5. Ctrl+A; Ctrl+Shift+F9
6. Ctrh+H;查找内容:空;格式为强调。替换内容为:空。
7. 删除第一行末尾的最后一个字符。
以下就是完成后效果图:
Snap1.jpg

TA的精华主题

TA的得分主题

发表于 2017-12-17 21:39 | 显示全部楼层
hellohaoyu1985 发表于 2014-2-11 20:41
也对,比我的SetRange,看上去简洁了一些。但是思路是一致的。Thanks。

非常感谢,苦苦寻觅,居然这样解决了:
ActiveDocument.Range(0, selection.End).Paragraphs.Count
返回当前光标所在的段落数。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 06:18 , Processed in 0.042760 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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