ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助]我的查找替换代码中出了点问题,请大家不吝赐教

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-6-1 18:49 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

在Word中查找时,查找内容设为“const”,但是正文中“u_const”也被查找出来了,请问怎样修改?

[此贴子已经被作者于2005-6-2 16:21:59编辑过]

TA的精华主题

TA的得分主题

发表于 2005-6-1 19:08 | 显示全部楼层
选择“完全匹配”。

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-6-2 08:46 | 显示全部楼层
“全字匹配”选中后还是不行

TA的精华主题

TA的得分主题

发表于 2005-6-2 09:09 | 显示全部楼层

假如说是正规英文单词的话,你可以查找" const",即前面加一个空格.

建议上传你的文档,我再比较一下.

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-6-2 10:04 | 显示全部楼层

文件已上传,是我做的一个代码高亮的宏。不太完善,麻烦守柔斑竹优化优化。 目前问题: 1、注释的判断高亮(包括单行判断和多行判断) 2、数字的判断高亮(如果在变量名中或注释中不高亮) 如果不调用Word的Find、Replacement,直接用Range手工判断应该怎样写呢?

TA的精华主题

TA的得分主题

发表于 2005-6-3 17:26 | 显示全部楼层

我初步看一下,uso1兄的代码,其实相当于我们VBA中的关键字自动"高亮"识别对吗?

我想了一下,其实你的要求,就是将所有符合要求的全字匹配的关键字(从文件源中)进行识别,是吗?

我想,能否这样考虑(注意,效率肯定不如FIND高),可以使用FOR EACH 在词中 循环比较(将所有关键字写入一个字符串中,以INSTR进行提取,如果全字匹配)则高亮,不知行否.

我继续考虑一下怎么做,我现在等你回应,OK?

TA的精华主题

TA的得分主题

发表于 2005-6-3 17:54 | 显示全部楼层

我试着修改了一下,感觉可能不是太好,请楼主验证之,多交流!

'* +++++++++++++++++++++++++++++ '* Created By I Love You_Word!@ExcelHome 2005-6-3 17:54:29 '仅测试于System: Windows NT Word: 10.0 Language: 2052 '^The Code CopyIn [标准模块-NewMacros]^' '* -----------------------------

Sub Highlighter(lang As Integer) ' ' 源代码高亮显示测试, WORD替换调用版 ' 宏在 2005-5-21 由 Simon 创建 ' Dim TextLine As String, MyKeyText As String, i As Range Select Case lang Case 0 Open "D:\20056210333502\c++.txt" For Input As #1 Case 1 Open "D:\20056210333502\object pascal.txt" For Input As #1 Case 2 Open "D:\20056210333502\sql.txt" For Input As #1 End Select Do While Not EOF(1) Line Input #1, TextLine MyKeyText = MyKeyText & Trim(TextLine) & "!" Loop Close #1 Application.ScreenUpdating = False For Each i In ThisDocument.Content.Words If VBA.InStr(MyKeyText, Trim(i) & "!") > 0 Then If i.Start = 0 Then GoTo BFC '如果为开始字符则转到指定行号 '如果该RANGE对象前面一个字符为空格或者软回车 If i.Previous(wdCharacter) = " " Or i.Previous(wdCharacter) = Chr(11) Then BFC: i.Bold = True: i.Font.Color = wdColorRed End If End If Next Application.ScreenUpdating = True End Sub '----------------------

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-6-5 21:30 | 显示全部楼层

哎呀!换个思路果然不同了。让单词与关键字列表匹配,这样文档只需遍历一遍,扩展注释、数字、文本加亮也简单了。斑竹大人果然厉害!!我改动了一下:

Sub Highlighter(lang As Integer) ' ' 源代码高亮显示测试, WORD替换调用版 ' 宏在 2005-5-21 由 Simon 创建 ' Dim TextLine As String, MyKeyText As String, i As Range

Select Case lang Case 0 Open "D:\20056210333502\c++.txt" For Input As #1 Case 1 Open "D:\20056210333502\object pascal.txt" For Input As #1 Case 2 Open "D:\20056210333502\sql.txt" For Input As #1 End Select MyKeyText = "!" Do While Not EOF(1) Line Input #1, TextLine MyKeyText = MyKeyText & Trim(TextLine) & "!" Loop Close #1 Application.ScreenUpdating = False For Each i In Selection.Words If InStr(MyKeyText, "!" & Trim(i) & "!") > 0 Then If i.Start = 0 Then GoTo BFC '如果为开始字符则转到指定行号 '如果该RANGE对象前面一个字符为空格或者软回车 If i.Previous(wdCharacter) = " " Or i.Previous(wdCharacter) = Chr(11) Then BFC: i.Bold = True: i.Font.Color = wdColorRed End If End If Next Application.ScreenUpdating = True End Sub

其中,改判断字符"Word!"为"!Word!",否则会误判,如"struct student a, b, c, *head, *p"中的"c"会加亮。

另外,我改word遍历循环为当前选择区域:For Each i In Selection.Words,但是只能选择一段,如果选中不连续的多段文字就不起作用了,请问怎样改写?

又或者遍历当前文档中的指定样式,如只对样式"源代码"中的文本进行高亮,应该怎样写呢?

小弟初学,还请诸位多多指点。

TA的精华主题

TA的得分主题

发表于 2005-6-6 05:47 | 显示全部楼层

呵呵.

第一个问题,即楼主所说的分隔符问题,本来就应该据实修改,避免出现误高亮关键字的.我的代码中,只是举个例子而已.

第二个问题:而连续性文本的问题,请参考:http://club.excelhome.net/viewthread.php?tid=83670,提供一个思路,将其置于一个新文档中,然后使用FOR EACH 循环或者以返回的文本内容,反过来定位在活动文档中的位置,即返回多个RANGE对象(也许有两种方法,一是FIND方法,一是INSTR函数,取得位置)

遍历文档中的样式,通常可以有两种方法,一是使用FIND 的FORMAT=TRUE进行查找,另一个是使用FOR EACH 在段落中循环,一旦该段落的STYLE符合要求,即在此段落的RANGE.WORDS中循环.

请楼主先试之,有问题,再作交流.

[此贴子已经被作者于2005-6-6 5:54:20编辑过]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-15 02:01 , Processed in 0.037224 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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