ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助]如何搜索并修改包含通配符的关键字

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-3-4 12:20 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

通配符关键字是:MatchPercent="100"*Font*\>

我想写一个宏来搜索 DOC 文档中的所有包含 MatchPercent="100"*Font*\> 的字符串,

搜索到后在字符串的最后添加一个特殊符号如:▼

例如:如果直接在 Word 中使用 MatchPercent="100"*Font*\> 进行搜索,可以找出这

样的字符串:

MatchPercent="100">Portions Copyrighted [year] [name of copyright owner]宋体">

找到后,在后面添加 ▼,也就是变成:

MatchPercent="100">Portions Copyrighted [year] [name of copyright owner]宋体">▼

完成后自动搜索下一个匹配的字符串,并添加该特殊符号,直到搜索出整篇文档中所有匹配的字符串。

有没有朋友有这方面的资料或代码,有点话希望提供点参考,非常感谢。

qPCFptFA.rar (9.17 KB, 下载次数: 36)
[此贴子已经被作者于2008-3-4 15:06:38编辑过]

TA的精华主题

TA的得分主题

发表于 2008-3-4 12:39 | 显示全部楼层

“FONT”只是变量吗?虽然“宋体”是一种“FONT”,但从字符角度“宋体”是两个字符,而“FONT”是三个不一样的字符。

楼主最好能提供查找样本文档,以免猜错题意。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-3-4 15:03 | 显示全部楼层

感谢楼上的朋友关注,Font 不是变量,Font 只是用于查找关键字的关键字中的字符。

MatchPercent="100"*Font*\>  是用于查找的关键字,其中的 * 是通配符,表示 n 个

任意字符,\> 也是通配符(即>)。

我上传一个文件,例如直接使用 word 的查找和替换可以在这个文件的文本中搜索出 6

个匹配,我想再这 6 个匹配的每一个后面加上一个 ▼。

我没学过 VB,对 VBA 也不熟悉,由于需要,非常希望能写一个宏来实现这样的功能。

我现在已经写了一点:但是目前还只能找出文本中匹配的字符串,不能在匹配的字符串

后添加一个特殊符号。我想到是如果能将找出的每一个字符串存在一个变量或者数组中

的话那就好了。

我的代码如下:

Sub SignMicro()
'
' SignMicro Macro
' 宏在 2008-3-3 由 Brook 录制
'
    Dim strFindChar As String, Count As Integer 'strFindChar:找到的匹配字符串
    Dim StringArray() As String
   
   
    Count = 0
    'strFindChar = "MatchPercent=""100""*Font*\>"
   
    On Error Resume Next    '忽略发生的错误,继续执行下面的代码
   
    Application.ScreenUpdating = False  '关闭屏幕更新
   
    Selection.Find.ClearFormatting
   
    With Selection.Find
        '.Text = "MatchPercent=""100""*Font*\>"
       
        'strFindChar = "MatchPercent=""100""*Font*\>"
       
        With ActiveDocument.Content.Find    '针对全文档
            Do While .Execute(findtext:="MatchPercent=""100""*Font*\>", MatchCase:=True, _
            MatchWildcards:=True) = True
                Count = Count + 1
                'Selection.InsertAfter "▼"
            Loop

            If MsgBox("文档中共发现了" & Count & "个" & strFindChar & vbCrLf _
             & ", 按 Yes 将进行下一步工作,按 No 取消", vbYesNo + vbInformation) = vbYes Then
            .Execute findtext:=findChar, Wrap:=wdFindContinue
            End If
       
        End With
       
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
       
        'Selection.InsertAfter "▼"
    'End With
    'Selection.Find.Execute
   
    Application.ScreenRefresh
   
    End With
   
End Sub

由于对 VBA 不熟悉,所以代码写得很糟糕,希望大家不要笑,再次感谢关注。

期待牛人帮忙。。。。。。

TA的精华主题

TA的得分主题

发表于 2008-3-4 19:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

有附件确实不一样。

如果不统计匹配数,用如下一句好像就行了:
ActiveDocument.Content.Find.Execute findtext:="MatchPercent=""100""*Font*\>", replacewith:="^&▼", MatchWildcards:=True, Replace:=wdReplaceAll

如果要统计,可试试这个:
Sub test()
Dim myrange As Range, mytext As String, n As Long
Set myrange = ActiveDocument.Content
mytext = VBA.InputBox("请输入查找代码", , "MatchPercent=""100""*Font*\>")
With myrange.Find
    Do While .Execute(findtext:=mytext, MatchWildcards:=True)
        With .Parent
            myrange.InsertAfter "▼"
            n = n + 1
            .SetRange .End, ThisDocument.Content.End
        End With
    Loop
End With
MsgBox "共找到" & n & "个匹配项。"
End Sub

[此贴子已经被作者于2008-3-4 19:24:02编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-3-5 10:16 | 显示全部楼层

非常感谢 sylun ,您的代码让我很受启发,但是我现在还是没有弄明白。

我直接运行了您的代码,但是得不到我想要的结果,如果是直接运行您的

Test 的话,似乎不能正确的在所找到的匹配代码后插入 ▼,而是在找到

的第一个匹配代码后插入了很多 ▼,我也没想明白这是为什么。我上传的

那个附件中共有六个匹配的代码,也就是说如果能在这六个匹配代码后分别

插入一个 ▼,那么就达到目的。感谢 sylun ,能否告知我您的邮箱或 QQ。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-3-5 10:19 | 显示全部楼层

统计不统计匹配数倒不是很重要,重要的是能在每个匹配后插入倒三角的符号。

我的邮箱 wzheng812@163.com

QQ:277821644

TA的精华主题

TA的得分主题

发表于 2008-3-5 12:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
刚才再用顶楼的附件测试,4楼的代码并无异常。楼主测试时是不是没有用顶楼附件进行,匹配项是不是在表格中?

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-3-5 13:35 | 显示全部楼层

我用的是和附件一样的文件,但是我在运行你所写的 Test 的时候发现运行一会

程序就死了,我没有看到结果,不知道是不是正常的。这样吧,你有 QQ 吗?方

便的话你能不能加我,继续向您请教。谢谢。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-3-6 12:05 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2008-3-6 14:36 | 显示全部楼层

大概情况前面已说过。楼主如果还是找不出原因,可将你运行出错的文档(带宏)传上来看看,另外最好注明你所使用的软件版本。

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 23:52 , Processed in 0.036516 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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