使用 Excel 文件内容替换 Word 文件中的文本(带换行符)。全部替换

使用 Excel 文件内容替换 Word 文件中的文本(带换行符)。全部替换

我正在尝试用包含换行符的 Excel 单元格内容替换 Word 文件中的文本。查找部分必须区分大小写。我尝试了 2 种不同的方法,但它们都无法完全发挥作用。

在选项 1 中,“查找”部分区分大小写,但在替换时,换行符会被替换为方块。

在选项 2 中,替换正确完成并保留 Excel 单元格中包含的换行符,但“查找”部分不区分大小写。

我尝试过将两者结合起来,但没有成功。有什么想法吗?我已经被这个问题困扰好几天了。

VBA 代码选项 1:

Set ObjWord = CreateObject("word.Application")
ObjWord.documents.Open "C:\Example.docx"
ObjWord.Visible = True
With ObjWord.ActiveDocument.Content.Find
            .ClearFormatting
            .Replacement.ClearFormatting
            .Text = "Insert Address"
            .Replacement.Text = Sheet1.Range("C2")
            .Forward = True
            .Wrap = 1           
            .Format = False
            .MatchCase = True
            .MatchWholeWord = True
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False

            .Execute Replace:=2     
    End With

结果选项 1:(问题是换行符被方块取代)。

测试行业[]Test Road, 51, 150001 VBA, USA[]收件人:Macro先生[]电话:+1 666 666 666[]电子邮件:[电子邮件保护]

VBA 代码选项 2:

Set ObjWord = CreateObject("word.Application")
ObjWord.documents.Open "C:\Example.docx"
ObjWord.Visible = True
FindText = "Insert Address"
ReplaceText = Sheet1.Range("C2")
ObjWord.Selection.Move 6, -1 'moverse al principio del documento
ObjWord.Selection.Find.Execute FindText:=FindText
ObjWord.Selection.Text = ReplaceText
ObjWord.Selection.Find.Execute FindText:=FindText

结果选项 2(问题是“查找”不区分大小写):

检测行业

Test Road, 51, 150001 VBA,美国

收件人:马克先生

电话:+1 666 666 666

电子邮件:[电子邮件保护]

最后,我找到了让替换区分大小写的方法,同时保留单元格的换行符,但现在我意识到宏在第一次查找时停止,我需要替换所有内容。问题是我不能使用“While”,因为 Word 文档应该保留在跟踪更改中,因此使用 While 会创建一个无限循环。有什么办法吗?

ObjWord.Selection.Move 6, -1 'moverse al principio del documento
ObjWord.Selection.Find.Execute FindText:=FindText, MatchCase:=True
ObjWord.Selection.Text = ReplaceText
ObjWord.Selection.Find.Execute FindText:=FindText, MatchCase:=True

谢谢您的帮助。

答案1

解决方案如下:

Objword.ActiveDocument.ShowRevisions = False
ObjWord.Selection.Move 6, -1 'move to the beginning of document
ObjWord.Selection.Find.Execute FindText:=FindText, MatchCase:=True
While objword.Selection.Find.Found = True
ObjWord.Selection.Text = ReplaceText
objword.Selection.Move 6, -1
ObjWord.Selection.Find.Execute FindText:=FindText, MatchCase:=True
Wend
objword.ActiveDocument.ShowRevisions = True

相关内容