除非注明,文章均为 战战如疯 原创,转载请保留链接: http://www./cat4/518.html,VBA交流群273624828。
看到一个网友提问说怎么批量替换多个Word文件中的回车符,这个问题很简单,遍历每个Word,然后替换其中的所有回车符即可。最简单的做法是在Word中录制一个宏,然后再加上个循环就好了,这个我们之前有过例子,感兴趣的可以自己试下。那这个网友要求是在Exce中实现这个功能,这个问题我们在“VBA批量替换多个Word中的特定词”一文中也讲过一种替换的方法,循环查找word中的该内容,然后替换,一直到不存在该内容了就退出循环。替换平常的文字是可以的,但是这次要替换的是回车符,不论你怎么替换,段落最后一个回车符是一直存在的,所以如果还用上面的方法就陷入无限循环了。
为了解决上面的问题,这次我们直接把录制好的Word VBA整个搬到Excel VBA中来,用word VBA 中的全部替换方法就没有这个问题了。
下面是我在Word中录制的宏
Sub 宏1() ' ' 宏1 宏 ' ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "^p" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = True .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute Replace:=wdReplaceAll End Sub
下面把这段代码移到Excel中并加上循环
Sub 批量替换word中回车() Dim mypath, Newname, i, XB, wApp, myfile mypath = ThisWorkbook.Path & "\" myfile = Dir(mypath & "*.docx") Do While myfile <> "" Set wApp = CreateObject("word.application") With wApp .Visible = True .Documents.Open mypath & myfile With .Selection.Find .Text = "^p" .Replacement.Text = "" .Wrap = 1 .Forward = True .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = True .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With .Selection.Find.Execute Replace:=2 .Documents.Save .Quit End With myfile = Dir Loop Set wApp = Nothing End Sub
这段移植就是要建一个Word对象,然后所有Word中用到的命令都要在前面加上这个Word对象,否则Excel不识别,还有一点关键的地方,在Word中的VBA常量wdFindContinue和wdReplaceAll在Excel中是不识别的,需要你把他们换回数值,那你说我不知道这个常量到底代表哪个数值怎么办?可以百度,更好的方法是在Word中运行录制的宏,在运行过该常量时中断,把鼠标放了该常量上就会显示它的值了,很简单。
本节不加示例文件了,主要目的不在此,主要是为了讲怎么把Word VBA移植到Excel中来。
|