ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 正则替换如何限定字体?用录制宏没法指定字体?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-6-20 16:58 | 显示全部楼层 |阅读模式
下面是我操作的正则替换:


(*)([^13。])(说明:要指定是黑体)

〖HTH〗\1〖HT〗\2

(*)([^13。])(说明:要指定是楷体)

〖HTK〗\1〖HT〗\2


这个如何用VBA实现?
我录制宏的时候,限制字体的操作好象录制不了。

TA的精华主题

TA的得分主题

发表于 2019-6-20 17:18 | 显示全部楼层
楼主,你有什么具体的要求?最好提供附件上来,不用正则,用 VBA 也能解决。

TA的精华主题

TA的得分主题

发表于 2019-6-20 18:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不对啊,查找替换可以限定字体的                                                                                       

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-20 18:53 | 显示全部楼层
本帖最后由 xkqtdzj 于 2019-6-20 18:54 编辑

谢谢413191246se一直以来的帮助。
这个需求是这样的:在指定的字体的字符串或段落前后插入自定义的字符。
不知这样我说明白了没?
@小花鹿 手动没问题,我录制宏的时候,代码里没有指定字体的内容。是我录制时有什么操作不对的地方?

见附件可以明白我的意思,一个文档是正则替换前的,一个文档是正则替换后的。
我希望用VBA来实现这个操作。

求助文件.rar

75.75 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2019-6-21 06:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
楼主,附件下载损坏,我试着编了一个小宏,看看是否满意:
  1. Sub aa查找黑体_前后插入指定字符()
  2. '全文查找:不激活对象/不选定文字内容/查找后光标不动/速度极快
  3.     With ActiveDocument.Content.Find
  4.         .ClearFormatting
  5.         .Font.NameFarEast = "黑体"
  6.         .Forward = True
  7.         .MatchWildcards = True
  8.         Do While .Execute
  9.             With .Parent
  10.                 .InsertBefore Text:="【"
  11.                 .InsertAfter Text:="】"
  12.                 .Font.Color = wdColorRed '红色(本行代码可删除)
  13.                 .Start = .End
  14.             End With
  15.         Loop
  16.     End With
  17. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-21 10:24 | 显示全部楼层
谢谢413191246se帮助,提供的代码可以达到我的希望。细化一下就OK了!

我尝试录制宏,然后在宏代码中指定字体。可以用了。
Sub 插入注解H()
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "(*)([^13。:])"
        .Font.NameFarEast = "黑体"
        .Replacement.Text = "〖HTH〗\1〖HT〗\2"
        .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
Sub 插入注解K()
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "(*)([^13。:])"
        .Font.NameFarEast = "楷体"
        .Replacement.Text = "〖HTK〗\1〖HT〗\2"
        .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

示例文件.rar

7.11 KB, 下载次数: 14

TA的精华主题

TA的得分主题

发表于 2019-6-21 14:07 | 显示全部楼层
楼主,厉害!用替换就完成了!我给你的代码精简了一下:
  1. Sub 插入注解H_OK()
  2.     With Selection
  3.         .HomeKey Unit:=wdStory
  4.         With .Find
  5.             .ClearFormatting
  6.             .Text = "(*)([^13。:])"
  7.             .Font.NameFarEast = "黑体"
  8.             With .Replacement
  9.                 .ClearFormatting
  10.                 .Text = "〖HTH〗\1〖HT〗\2"
  11.             End With
  12.             .Execute MatchWildcards:=True, Forward:=True, Format:=True, Replace:=wdReplaceAll
  13.         End With
  14.     End With
  15. End Sub
  16. Sub 插入注解K_OK()
  17.     With Selection
  18.         .HomeKey Unit:=wdStory
  19.         With .Find
  20.             .ClearFormatting
  21.             .Text = "(*)([^13。:])"
  22.             .Font.NameFarEast = "楷体"
  23.             With .Replacement
  24.                 .ClearFormatting
  25.                 .Text = "〖HTK〗\1〖HT〗\2"
  26.             End With
  27.             .Execute MatchWildcards:=True, Forward:=True, Format:=True, Replace:=wdReplaceAll
  28.         End With
  29.     End With
  30. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-21 15:56 | 显示全部楼层
本帖最后由 xkqtdzj 于 2019-6-21 16:02 编辑
413191246se 发表于 2019-6-21 14:07
楼主,厉害!用替换就完成了!我给你的代码精简了一下:

谢谢413191246se,这样去除冗余,重点突出了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 21:00 , Processed in 0.033866 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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