ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 多处关键字符替换,要么很慢,要么死机!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-3-29 10:21 | 显示全部楼层 |阅读模式
老师们好!
在一个长为1200多页的文档中,把下面29个不同的关键字符,一次快速替换为另外的关键字符,想请老师帮忙写个快而不会死机的代码!谢谢!

新建文件夹.rar

1.11 MB, 下载次数: 89

TA的精华主题

TA的得分主题

发表于 2021-3-30 00:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
* 相见,请备份原始文档后在示例文档上试用下面的宏。
* 请将代码(如果用 Win10-64)复制到空白文档后,全选,剪切到 VBE 中。
* 在我的《中高端联想电脑》上,运行时间 = 71.96704 秒,不知在你的电脑上是否能忍受?
  1. Sub AgainTryReplace()
  2.     ActiveWindow.ActivePane.View.Zoom.PageFit = wdPageFitBestFit
  3.     ActiveWindow.ActivePane.View.Zoom.PageFit = wdPageFitFullPage
  4.     Selection.HomeKey Unit:=wdStory

  5.     Dim l!
  6.     l = Timer
  7.     With ActiveDocument.Content.Find
  8.         .Execute "(", , , 0, , , , , , "(", 2
  9.         .Execute ")", , , 0, , , , , , ")", 2
  10.         .Execute "(。)())", , , 1, , , , , , "\2\1", 2
  11.         .Execute "( )())", , , 1, , , , , , "\2", 2
  12.         .Execute "(()( )", , , 1, , , , , , "\1", 2
  13.         .Execute "[-~]", , , 1, , , , , , "~", 2
  14.         .Execute "%", , , 0, , , , , , "%", 2
  15.         .Execute "∶", , , 0, , , , , , ":", 2
  16.         .Execute "大枣", , , 0, , , , , , "红枣", 2
  17.         .Execute "亦", , , 0, , , , , , "也", 2
  18.         .Execute "盖", , , 0, , , , , , "凡", 2
  19.         .Execute "(钱),", , , 1, , , , , , "\1、", 2
  20.         .Execute "(克),", , , 1, , , , , , "\1、", 2
  21.         .Execute "(枚),", , , 1, , , , , , "\1、", 2
  22.         .Execute "(两),", , , 1, , , , , , "\1、", 2
  23.         .Execute "(钱半),", , , 1, , , , , , "\1、", 2
  24.         .Execute "(两半),", , , 1, , , , , , "\1、", 2
  25.         .Execute "(》)日", , , 1, , , , , , "\1曰", 2
  26.         .Execute "(曰)([.,,;∶:︰。:])", , , 1, , , , , , "\1", 2
  27.         .Execute "(曰)", , , 1, , , , , , "\1:", 2
  28.     End With
  29.     MsgBox "替换完毕!用时 " & Timer - l & " 秒!", 0 + 48
  30. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-3-30 11:31 | 显示全部楼层
本帖最后由 相见是缘8 于 2021-3-30 19:00 编辑
413191246se 发表于 2021-3-30 00:50
* 相见,请备份原始文档后在示例文档上试用下面的宏。
* 请将代码(如果用 Win10-64)复制到空白文档后, ...
老师好!
感谢援手!
代码测试了2次,也会死机,运行了一个多小时,我中断了程序。
这种类似文档还有几十个,不同的关键字符要替换,是我那学中医的弟弟传过来让我帮忙处理的,本想也快,分别用了数组替换(很慢很慢)和类似你的代码,替换(死机)……
老师,我的电脑是公司的,配置较低。还有更好的方法吗?

图.png

TA的精华主题

TA的得分主题

发表于 2021-3-30 22:15 | 显示全部楼层
本帖最后由 413191246se 于 2021-3-30 23:23 编辑

龚老师 要出手。。。

TA的精华主题

TA的得分主题

发表于 2021-3-30 22:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
通过xml进行替换,应该在几秒内。

TA的精华主题

TA的得分主题

发表于 2021-3-30 22:47 | 显示全部楼层
如果你不在乎格式,这个就是一个文本文件而已,直接替换文本内容估计更快

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-3-31 06:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
cuteword 发表于 2021-3-30 22:47
通过xml进行替换,应该在几秒内。

龚老师好!
好久不见你露面!
我不懂xml,能否请你详教!谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-3-31 06:44 | 显示全部楼层
cuteword 发表于 2021-3-30 22:47
如果你不在乎格式,这个就是一个文本文件而已,直接替换文本内容估计更快

龚老师好!
在乎格式。如用文本内的替换,要怎样一次批量替换多个不同的关键字符?还请你指教!谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-3-31 06:51 | 显示全部楼层
413191246se 发表于 2021-3-30 22:15
龚老师 要出手。。。

老师好!
有更好的方法吗?

TA的精华主题

TA的得分主题

发表于 2021-3-31 08:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
试试看,
Sub lx()
    Dim ar, br(), cr(), wd1 As Document, wd As Document, d As Object
    Dim i%, s$, t$
        Set wd1 = ThisDocument
        Set wd = Documents.Open(wd1.Path & "\替换的关键字符.doc")
        With wd
        ReDim br(1 To .Paragraphs.Count - 9, 1 To 2)
        For i = 7 To .Paragraphs.Count - 3
            s = .Paragraphs(i).Range.Text: s = Left(s, Len(s) - 1)
            br(i - 6, 1) = Split(s, "替换为")(0): br(i - 6, 2) = Split(s, "替换为")(1)
        Next i
        End With
    ar = wd1.Range.Text
    For i = 1 To UBound(br)
        ar = Replace(ar, br(i, 1), br(i, 2))
    Next i
    wd1.Range.Text = ar
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-20 17:30 , Processed in 0.044654 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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