ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 段落行数(宏)一行代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-12-6 20:48 | 显示全部楼层 |阅读模式
* 此宏虽小,作用很大!原来 守柔版主 编程过一个有几行的代码,但此宏只有一行代码,短小精悍,亦是网上搜来。好东西不敢独享,特奉献给大家。
* 只须选定某个段落,即可显示本段落几行;但在表格中时,要选定单元格后,回缩一个字符,才能正确显示行数。
  1. Sub 段落行数()
  2.     MsgBox Selection.Paragraphs(1).Range.ComputeStatistics(statistic:=wdStatisticLines)
  3. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2016-12-7 11:55 | 显示全部楼层
这是一行代码,请测试!
  1. Sub 段落行数()
  2.     MsgBox ActiveDocument.Range(Selection.Start, Selection.End - 1).ComputeStatistics(statistic:=wdStatisticLines)
  3. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-12-7 20:29 | 显示全部楼层
杜先生 代码妙啊!选定文本或单元格后即可显示真实行数,字表通用!谢谢!
——杜先生,我有问题,请解决为盼啊!
链接:请看该帖最后一楼问题。
如何实现让查找到的字符、只处以被选中的状态?
http://club.excelhome.net/thread-1311673-1-1.html
(出处: ExcelHome技术论坛)

TA的精华主题

TA的得分主题

发表于 2016-12-8 00:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
413191246se 发表于 2016-12-7 20:29
杜先生 代码妙啊!选定文本或单元格后即可显示真实行数,字表通用!谢谢!
——杜先生,我有问题,请解决 ...
  1. Sub 替换半角标点为全角()
  2.     Dim d, x, y, k, t, i%, j%
  3.     x = Array(".", ",", ";", ":", "!", "?")
  4.     y = Array("。", ",", ";", ":", "!", "?")
  5.     Application.ScreenUpdating = False
  6.     Set d = CreateObject("Scripting.Dictionary")
  7.     For i = 0 To UBound(x)
  8.         d(x(i)) = y(i)
  9.     Next
  10.     k = d.keys: t = d.items
  11.     For j = 0 To d.Count - 1
  12.         With ActiveDocument.Content.Find
  13.             .ClearFormatting
  14.             .Replacement.ClearFormatting
  15.             .Text = "([一-﨩^13^11])" & k(j) & "([0-9一-﨩^13^11])"
  16.             .MatchWildcards = True
  17.             .Replacement.Text = "\1" & t(j) & "\2"
  18.             .Execute Replace:=wdReplaceAll
  19.         End With
  20.     Next
  21.     Application.ScreenUpdating = True
  22. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2016-12-8 07:50 | 显示全部楼层

前辈好!
可否再劳您在此代码的基础上,把示例文本下面的8:30~10:00.
中间的~替换为~        0至段落符之间的. 替换为。
也就是说凡是段落符前面的. 都替换为句号。
谢谢前辈!

示例文本:
今年,在干部廉洁自律工作方面;将重点抓好思想道德和纪律教育.切实抓好八项要求的落实!中华人民共和国?节约经费3,457.06元,花费45,562.73元.
联系电话:261-6375
句号.逗号,分号;冒号:叹号!问号?开会时间,早8:30~10:00.

TA的精华主题

TA的得分主题

发表于 2016-12-8 08:21 | 显示全部楼层
13907933959 发表于 2016-12-8 07:50
前辈好!
可否再劳您在此代码的基础上,把示例文本下面的8:30~10:00.
中间的~替换为~        0至段落 ...

就这个问题,应该是反反复复很多次了吧?也改了很多次了吧?不好意思,有点烦了!
再改可以,收取费用!

TA的精华主题

TA的得分主题

发表于 2016-12-8 09:01 | 显示全部楼层
本帖最后由 13907933959 于 2016-12-8 09:06 编辑
duquancai 发表于 2016-12-8 08:21
就这个问题,应该是反反复复很多次了吧?也改了很多次了吧?不好意思,有点烦了!
再改可以,收取费用!
前辈好!
对不起!对不起!这个问题是反复多次了,抱歉!抱歉!抱歉!
前辈的东西总是让人爱不释手,我也是想收藏这个代码以备后用,前辈不知以帮了多少忙,也未见说“收取费用”,我猜前辈不是真的为了那一点钱,而是真的烦了、不愿再纠缠这个问题,是吧?既然前辈烦了,就不搞了。感谢前辈!

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-12-8 22:19 | 显示全部楼层
谢谢 杜先生!太辛苦了!请好好休息!——问题解决!
139:杜先生 烦了,累了,就让 杜先生 好好休息!别累坏了!——我勉为其难编了 3 个小宏,你试试吧(要依次执行,第1和第2个可以合并成一个宏,颜色语句可以删除,但测试时不必删),请把我的示例文本保存为一个文件,反复测试(反复测试的话,要用到我的模板中的《重新打开》宏,知道吗?)
***《示例文本:时间格式》:
点名8:15.
China8:30~10:00.
How4:00-7:30.
OK5:04~9:20.
  1. Sub 时间格式()
  2.     Selection.HomeKey Unit:=wdStory
  3.     Selection.Find.ClearFormatting
  4.     Do While Selection.Find.Execute(FindText:="[0-9][::][0-9]", Forward:=True, MatchWildcards:=True)
  5.         If Selection Like "*:*" Then Selection.Characters(2).Text = ":"
  6.         Selection.Characters(2).Font.Color = wdColorRed '红色
  7.         Selection.MoveRight Unit:=wdCharacter, Count:=1
  8.     Loop
  9. End Sub
  10. Sub 时间符号()
  11.     Selection.HomeKey Unit:=wdStory
  12.     Selection.Find.ClearFormatting
  13.     Do While Selection.Find.Execute(FindText:=":[0-9][0-9][!:][0-9]{1,2}:", Forward:=True, MatchWildcards:=True)
  14.         Selection.Characters(4).Text = "~"
  15.         Selection.Characters(4).Font.Color = wdColorBlue '蓝色
  16.         Selection.MoveRight Unit:=wdCharacter, Count:=1
  17.     Loop
  18. End Sub
  19. Sub 数字段落符间句点变句号()
  20.     Selection.HomeKey Unit:=wdStory
  21.     Selection.Find.ClearFormatting
  22.     Do While Selection.Find.Execute(FindText:="[0-9]." & vbCr, Forward:=True, MatchWildcards:=True)
  23.         Selection.Characters(2).Text = "。"
  24.         Selection.Characters(2).Font.Color = wdColorPink '粉红
  25.         Selection.MoveRight Unit:=wdCharacter, Count:=1
  26.     Loop
  27. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2016-12-9 08:08 | 显示全部楼层
413191246se 发表于 2016-12-8 22:19
谢谢 杜先生!太辛苦了!请好好休息!——问题解决!
139:杜先生 烦了,累了,就让 杜先生 好好休息!别 ...

师傅好!
感谢师傅!
这个如果是手动换行符前面的点号就替换不了,师傅可否有办法让它无论是段落符或手动换行符前面的点号都能替换?

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-12-9 21:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
139:有两种方法:一是扩展楼上第3段代码(把回车vbcr变为^l查找);二是直接把全文手动换行符替换为段落符号(弯回车符)后应用楼上第3段代码即可。下面是第一、二种方法所需代码:
  1. Sub 数字段落符间句点变句号_手动换行符()
  2.     Selection.HomeKey Unit:=wdStory
  3.     Selection.Find.ClearFormatting
  4.     Do While Selection.Find.Execute(FindText:="[0-9].^l", Forward:=True, MatchWildcards:=True)
  5.         Selection.Characters(2).Text = "。"
  6.         Selection.Characters(2).Font.Color = wdColorPink '粉红
  7.         Selection.MoveRight Unit:=wdCharacter, Count:=1
  8.     Loop
  9. End Sub
复制代码

***
  1. Sub 删除手动换行符和假段落标记()
  2.     ActiveDocument.Content.Find.Execute FindText:="^l", replacewith:="^p", Replace:=wdReplaceAll
  3.     ActiveDocument.Content.Find.Execute FindText:="^13", replacewith:="^p", Replace:=wdReplaceAll
  4. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-13 13:08 , Processed in 0.025133 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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