Office中国论坛/Access中国论坛

标题: 为什么用find替换如此的慢? [打印本页]

作者: 天龙蝎    时间: 2015-3-24 22:53
标题: 为什么用find替换如此的慢?
各位大侠:
有问题想请教,
我用下面两种代码做批量替换
第一种如下,它能保持格式的替换,但速度相当慢,而且替换时鼠标在不停的闪烁
target_doc.Content.Find.Execute findtext:=targetcontent, Replacewith:=replacecontent, Replace:=wdReplaceAll
第二种如下,它能1秒左右替换完毕,但是文档里面的格式、表格、粘贴图片都没了
tbstring = target_doc.Content
tbstring = Replace(tbstring, targetcontent, replacecontent)
为什么有这样的区别?

我用第一种方法,做了以下逐条尝试
With target_doc
        .Visible = True
        .ActiveWindow.View.Type = wdNormalView
        .ScreenUpdating = False
        .Options.CheckSpellingAsYouType = False
        '.DisplayStatusBar = False  由于词句在2010版已无效,就没用
End With
但是都不能提速,所以想问要怎么做才能提速呢?
谢谢!!!
作者: tmtony    时间: 2015-3-25 17:58
find是有些慢的。
如果不处理其它,只有文字用replace会快不少
作者: 天龙蝎    时间: 2015-3-25 20:19
tmtony 发表于 2015-3-25 17:58
find是有些慢的。
如果不处理其它,只有文字用replace会快不少

可以文件很少只有文字的嘛,
我最不理解的是,正如我上面所写的,我把find套进循环进行批量替换的时候,为什么鼠标会闪个不停呢?
究竟是在刷新什么呢?
能不能关闭这种更新呢?
谢谢指点!!!
作者: tmtony    时间: 2015-3-25 22:24
试试用API
lockwindowupdate
不知道行不行
作者: Franc007She    时间: 2016-1-5 14:19
据我个人观察,用find并replaceall时系统会把大量资源用于保存备份文件。有时一分钟可能会保存近10次。然而如果只用find和tyeptext,速度就会快多了。虽然没有replace快,但也很不错。只是要明确一点,不能有跨行合并的表格单元格。否则可能会出现死循环。
作者: pld    时间: 2018-4-30 14:49
wrap :=wdfindcontinue和wdfindstop 不一样,前者要占大量资源,




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3