ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 有没有哪个宏可以实现WORD选定的文字段落m3、m2集体上标?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-11-23 19:43 | 显示全部楼层
楼主朋友,代码第二行后半段,你重新读一下好吗?(如果未选定区域,则选择全文----这说明,你可以选定某个段落)。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-23 23:09 | 显示全部楼层
413191246se 发表于 2014-11-23 19:43
楼主朋友,代码第二行后半段,你重新读一下好吗?(如果未选定区域,则选择全文----这说明,你可以选定某个 ...

我在OFFICE2007和OFFICE2013的WORD里都测试过了,即使我只选定了某一段落,它还是会把我整个文档都替换一遍。
我上传其中几个段落,烦请您测试一下。

XX流域水文站点布设较齐全,测验工作有一定基础。以设立时间最早,分别于1944年9月和1946年6月开始设站观测,控制流域面积4940km2,是X溪上游的主要控制站;XX站控制流域面积8490km2,是XX溪下游的主要控制站。X溪以XX站设立时间最早,设立于1945年11月,是X溪下游的控制站。
X溪流域主要水文站有XXX。xx站位于xx游干流上,控制流域面积3419 km2,约占xx溪全流域面积的86.8%,为xx下游主要控制站;xx站最早设立于1936年10月,1945年11月设立为水文站,观测项目有水位,流量、降雨、蒸发、水温、悬移质泥沙等,1948年12月停测,1950年3月恢复为水文站,继续进行测验至今。站位于溪流域上游,控制流域面积790km2,站设立于1957年4月,观测水位,流量、泥沙、雨量、水温、蒸发等资料至今。水文站位于溪干流,控制流域面积31.5km2,为小流域水文站,设立于1956年4月,观测项目有降雨、水位、流量等,1985年起停测。控制流域面积484km2,龙山站设立于1954年4月,观测水位、流量、泥沙、雨量、水温等资料。
2)水库库容:电站水库总库容仅15.0万m3,电站水库仅42.9万m3,这两个水库均没有设立调节库容,为无调节水库。水库总库容308.0万m3,正常库容236万m3,死库容6.0万m3,调节库容230万m3,为不完全年调节水库。

TA的精华主题

TA的得分主题

发表于 2014-11-24 09:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
针对楼上代码,一测试马上出错,的确如楼主所说!遂经过F8逐语句反复测试(从没这么认真过),发现查找范围跑出所选,最后灵机一动,巧妙地把m2、m3替换为m2`、m3`,终于测试成功(并观察总字数没有变化,说明宏是安全的)!但也建议,楼主在应用我的宏(包括任何宏)时,要备份原文件后再应用。这回可以全选,也可以选定任意文字(不必是段落)后应用此宏,并且查找语句也精简为一条,添加了查找m2/m3的次数统计。
Sub 设置上标()
    Dim myRange As Range, i As Long, j As Long
    If Selection.Type = wdSelectionIP Then Selection.WholeStory
    Set myRange = Selection.Range
    myRange.Find.Execute FindText:="^", ReplaceWith:="", Replace:=wdReplaceAll
    myRange.Find.Execute FindText:="m2", ReplaceWith:="m2`", Replace:=wdReplaceAll
    myRange.Find.Execute FindText:="m3", ReplaceWith:="m3`", Replace:=wdReplaceAll
    Do
        Selection.Find.Execute FindText:="m2`", Forward:=True
        If Selection.Find.Found = False Then Exit Do
        If Selection.Find.Found = True Then i = i + 1
        Selection.MoveStart Unit:=wdCharacter, Count:=1
        Selection.Font.Color = wdColorRed
        Selection.Font.Superscript = True
        Selection.MoveRight Unit:=wdCharacter, Count:=1
    Loop
    myRange.Select
    Do
        Selection.Find.Execute FindText:="m3`", Forward:=True
        If Selection.Find.Found = False Then Exit Do
        If Selection.Find.Found = True Then j = j + 1
        Selection.MoveStart Unit:=wdCharacter, Count:=1
        Selection.Font.Color = wdColorRed
        Selection.Font.Superscript = True
        Selection.MoveRight Unit:=wdCharacter, Count:=1
    Loop
    myRange.Find.Execute FindText:="`", ReplaceWith:="", Replace:=wdReplaceAll
    myRange.Select
    MsgBox "处理完毕!(共处理" & i & "个m2," & j & "个m3)", vbOKOnly + vbExclamation, "设置上标"
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-24 14:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
413191246se 发表于 2014-11-24 09:41
针对楼上代码,一测试马上出错,的确如楼主所说!遂经过F8逐语句反复测试(从没这么认真过),发现查找范围 ...

完美解决问题,万分感谢413191246se的帮助,谢谢!

TA的精华主题

TA的得分主题

发表于 2015-10-31 11:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub m2m3上标()

'
    Selection.Find.ClearFormatting
    With Selection.Find.Font
        .Superscript = False
        .Subscript = False
    End With
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Replacement.Font
        .Superscript = True
        .Subscript = False
    End With
    With Selection.Find
        .Text = "[mM][23]"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    With Selection.Find.Font
        .Superscript = True
        .Subscript = False
    End With
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Replacement.Font
        .Superscript = False
        .Subscript = False
    End With
    With Selection.Find
        .Text = "[mM]"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

问题又来了,这个代码会把“M222”或“M2X”也替换。。。。。。

TA的精华主题

TA的得分主题

发表于 2015-10-31 11:26 | 显示全部楼层
目测,关于上下标,WORD中替换的通配符无法实现。
求高手发招。

TA的精华主题

TA的得分主题

发表于 2015-10-31 11:29 | 显示全部楼层
3楼的动画,查找所有的M[23],由于没有替换,WORD好象不能生成宏。

TA的精华主题

TA的得分主题

发表于 2015-10-31 20:13 | 显示全部楼层
我之前用过 Word文档自动排版软件(排版大师)
里面的上下标字符就特别适合,www.wordpb.com

TA的精华主题

TA的得分主题

发表于 2015-10-31 20:19 | 显示全部楼层
我之前用了一个软件,Word文档自动排版软件(排版大师)
里面的上下标工具就可以wordpb.com

TA的精华主题

TA的得分主题

发表于 2015-11-1 14:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
见我最新帖!!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 13:40 , Processed in 0.024929 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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