ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求一个word宏,把非红色的字体都换成黑色

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-6-7 21:19 | 显示全部楼层
本帖最后由 小花鹿 于 2019-6-8 00:20 编辑
413191246se 发表于 2019-6-7 20:31
* 测试结果(测试文档 3200字):
* 413191246se 代码,用时 0.21 秒
* daibao88朋友代码,用时 6.20 秒
...

我这里9万字,我的代码2秒,你的代码0.5秒,是4倍,而你那里是30倍,不知道为什么会有这么大的差距

TA的精华主题

TA的得分主题

发表于 2019-6-7 21:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
413191246se 发表于 2019-6-7 20:31
* 测试结果(测试文档 3200字):
* 413191246se 代码,用时 0.21 秒
* daibao88朋友代码,用时 6.20 秒
...

是的,小花鹿老师及我的代码确实存在多次循环,时间长的问题。但你的代码有点取巧,原文必须没有使用字符下划线。

TA的精华主题

TA的得分主题

发表于 2019-6-7 23:43 | 显示全部楼层
小花鹿 老师“9万字 2秒”,我信!daibao88朋友说“必须没有下划线”确实如此,我是取巧了,有漏洞,不算真功夫,你们才是真功夫!谢谢 两位!

TA的精华主题

TA的得分主题

发表于 2019-6-8 06:41 | 显示全部楼层
413191246se 发表于 2019-6-7 23:43
小花鹿 老师“9万字 2秒”,我信!daibao88朋友说“必须没有下划线”确实如此,我是取巧了,有漏洞,不算真 ...

漏洞可根据原文上:不同的字体、字体的大小、颜色、字形…等,修改代码避开。

TA的精华主题

TA的得分主题

发表于 2019-6-8 09:10 | 显示全部楼层
  1. Type node
  2.     mystar As Long
  3.     myend As Long
  4. End Type
  5. Dim arr() As node
  6. Sub main()
  7.     Dim doc As Document
  8.     Set doc = ActiveDocument
  9.     If Not get_data(doc) Then Exit Sub
  10.     For i = 0 To UBound(arr)
  11.         doc.Range(arr(i).mystar, arr(i).myend).Font.ColorIndex = wdRed
  12.     Next
  13. End Sub
  14. Function get_data(ByRef doc As Document) As Boolean
  15.     Dim n As Long
  16.     With doc.Content.Find
  17.         .Font.ColorIndex = wdRed
  18.         Do While .Execute
  19.             ReDim Preserve arr(n)
  20.             arr(n).mystar = .Parent.Start
  21.             arr(n).myend = .Parent.End
  22.             n = n + 1
  23.         Loop
  24.     End With
  25.     If n > 0 Then get_data = True Else Exit Function
  26.     doc.Content.Font.ColorIndex = wdBlack
  27. End Function
复制代码

TA的精华主题

TA的得分主题

发表于 2019-6-8 19:27 | 显示全部楼层
如果说楼上代码理解有难度,那么请看下面的代码(应该好理解了!)
  1. Sub main()
  2.     Dim doc As Document, i As Long, arr()
  3.     Set doc = ActiveDocument
  4.     If Not get_data(doc, arr) Then Exit Sub
  5.     For i = 1 To UBound(arr, 2)
  6.         doc.Range(arr(1, i), arr(2, i)).Font.ColorIndex = wdRed
  7.     Next
  8. End Sub
  9. Function get_data(ByRef doc As Document, ByRef arr) As Boolean
  10.     Dim n As Long
  11.     With doc.Content.Find
  12.         .Font.ColorIndex = wdRed
  13.         Do While .Execute
  14.             n = n + 1
  15.             ReDim Preserve arr(1 To 2, 1 To n)
  16.             arr(1, n) = .Parent.Start
  17.             arr(2, n) = .Parent.End
  18.         Loop
  19.     End With
  20.     If n > 0 Then get_data = True Else Exit Function
  21.     doc.Content.Font.ColorIndex = wdBlack
  22. End Function
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-6-8 22:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
duquancai 发表于 2019-6-8 19:27
如果说楼上代码理解有难度,那么请看下面的代码(应该好理解了!)

学习一下                                                                                                                  

TA的精华主题

TA的得分主题

发表于 2019-6-9 21:13 | 显示全部楼层
本帖最后由 duquancai 于 2019-6-9 21:21 编辑
小花鹿 发表于 2019-6-8 22:28
学习一下                                                                                           ...

再看看以下代码》》》》
  1. Sub main()
  2.     Dim doc As Document, r As Variant, arr() As Range
  3.     Set doc = ActiveDocument
  4.     If Not get_data(doc, arr()) Then Exit Sub
  5.     For Each r In arr
  6.         r.Font.ColorIndex = wdRed
  7.     Next
  8. End Sub
  9. Function get_data(ByRef doc As Document, ByRef arr() As Range) As Boolean
  10.     Dim n As Long
  11.     With doc.Content.Find
  12.         .Font.ColorIndex = wdRed
  13.         Do While .Execute
  14.             n = n + 1: ReDim Preserve arr(1 To n)
  15.             Set arr(n) = .Parent.Duplicate
  16.         Loop
  17.     End With
  18.     If n > 0 Then get_data = True Else Exit Function
  19.     doc.Content.Font.ColorIndex = wdBlack
  20. End Function
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-6-9 23:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
duquancai 发表于 2019-6-9 21:13
再看看以下代码》》》》

这个好,第二次见Duplicate了

TA的精华主题

TA的得分主题

发表于 2019-7-2 17:00 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 20:35 , Processed in 0.031701 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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