ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

求助:按条件查找替换并保留文本格式(加点字、下划线等)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-8-7 17:10 | 显示全部楼层 |阅读模式
如题,按选项ABCD字符长度,整齐排列ABCD选项到指定的位置(一行)

关键是要保留选项文本的格式(比如下划线、着重号等)


谢谢!


代码如下:



Sub 选项ABCD对齐设置保留格式()

    Dim mydoc As Document
    Dim Rng As Range
    Dim Rng1 As Range
    Dim Rng2 As Range
    Dim Rng3 As Range
    Dim Rng4 As Range
    Dim a, b, c, d
    Set mydoc = ActiveDocument
        With mydoc.Content.Find
        .Text = "(A.[!^13]{1,})^13(B.[!^13]{1,})^13(C.[!^13]{1,})^13(D.[!^13]{1,})^13"
        .MatchWildcards = True
        Do While .Execute
            Set Rng = .Parent
            Set Rng1 = Rng.Paragraphs(1).Range
            Set Rng2 = Rng.Paragraphs(2).Range
            Set Rng3 = Rng.Paragraphs(3).Range
            Set Rng4 = Rng.Paragraphs(4).Range
            a = Len(StrConv((Rng1.Text), vbFromUnicode)) - 1
            b = Len(StrConv((Rng2.Text), vbFromUnicode)) - 1
            c = Len(StrConv((Rng3.Text), vbFromUnicode)) - 1
            d = Len(StrConv((Rng4.Text), vbFromUnicode)) - 1

            ‘MsgBox a & Chr(9) & b & Chr(9) & c & Chr(9) & d

            If a < 20 And b < 20 And c < 20 And d < 20 Then
                If a >= 10 Then
                    If c >= 10 Then
                        .Replacement.Text = "^t\1^t\2^13^t\3^t\4^13"
                    Else
                        .Replacement.Text = "^t\1^t\2^13^t\3^t^t\4^13"
                    End If
                Else
                    If c >= 10 Then
                        .Replacement.Text = "^t\1^t^t\2^13^t\3^t\4^13"
                    Else
                        If b >= 10 Or d >= 10 Then
                            .Replacement.Text = "^t\1^t^t\2^13^t\3^t^t\4^13"
                        Else
                            .Replacement.Text = "^t\1^t\2^t\3^t\4^13"
                        End If
                    End If
                End If
            Else
                .Replacement.Text = "^t\1^13^t\2^13^t\3^13^t\4^13"
            End If
            Rng.Move 4
        Loop
    End With

    mydoc.Content.Find.Execute Replace:=wdReplaceAll

End Sub


word2003,运行后却没有任何结果,问题到底出在何处?请明师直言相告啊,在此先谢谢各位先进!


测试文档可随时删除.rar

3.71 KB, 下载次数: 30

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-7 17:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
抱歉!初次发帖,竟然忘了想要达到的效果文档,在此补充附件。

(效果)测试文档可随时删除.rar

3.75 KB, 下载次数: 13

TA的精华主题

TA的得分主题

发表于 2019-8-7 17:53 | 显示全部楼层
chinamath 发表于 2019-8-7 17:34
抱歉!初次发帖,竟然忘了想要达到的效果文档,在此补充附件。

没看你的效果文档,你说把选项弄成一行那就一行吧。不需要写代码,简单的几次替换就可以了:
rygff.png

注意,在\1\2的后面添加了不可见的中文空格符。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-7 17:54 | 显示全部楼层
gbgbxgb 发表于 2019-8-7 17:53
没看你的效果文档,你说把选项弄成一行那就一行吧。不需要写代码,简单的几次替换就可以了:

根据选项的长短,效果为:有的是一行,有的是两行,有的是4行(保持不变)

TA的精华主题

TA的得分主题

发表于 2019-8-8 22:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
针对每次匹配的选项长度逐个判断,逐个替换,应放到循环里替换 .Execute Replace:=wdReplaceOne

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-9 13:23 | 显示全部楼层
daibao88 发表于 2019-8-8 22:03
针对每次匹配的选项长度逐个判断,逐个替换,应放到循环里替换 .Execute Replace:=wdReplaceOne

谢谢您!真是太巧啦,我从不知道有这个命令。

但昨天下午,无奈之下我就把All改了one,奇迹出现啦!

TA的精华主题

TA的得分主题

发表于 2019-8-9 14:07 | 显示全部楼层
我的运行结果怎么是这样的?如下图,两行的情况没对齐。
运行结果.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-9 14:13 | 显示全部楼层
xkqtdzj 发表于 2019-8-9 14:07
我的运行结果怎么是这样的?如下图,两行的情况没对齐。

重新设置段落即可

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-8-10 23:21 来自手机 | 显示全部楼层
个人觉得字星个数应体现出汉字与英文的区别
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-11 05:38 , Processed in 0.037060 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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