使用VBA从Excel中打开Word Doc以查找日期文本,并将其替换为Excel中单元格中的日期文本



我有一个带有文本的单词文档,其中还有一个日期文本显示这种格式:

text text text 17.01.2020 text text text.

我想用Excel中的一个单元格替换上面的日期文本,该单元格也是一个看起来像这样的日期 18.01.2020.

因此,VBA代码应执行以下操作:

1.打开单词文档

2.查找文本并将其替换为Excel中的文本

3.保存Word文档。

Sub DocSearchandReplace()
Dim wdApp As Object, wdDoc As Object
Set wdApp = CreateObject("word.application")
wdApp.Visible = True
Set wdDoc = wdApp.Documents.Open("C:sampletest.docx")
With wdDoc.Content.Find
.Date = "???"
.Replacement.Cell = "referencing a cell from Excel??"
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
wdDoc.Save 'it however always prompt a word warning, how to surpress it?
wdDoc.Close 'it only closes the doc inside Word without closing the whole program.
Set wdApp = Nothing: Set wdDoc = Nothing
End Sub

我不确定在.日期和 .替换单元格部分。

问题是你的语法是错误的。Find对象中不存在.Date.Replacement.Cell属性。确保阅读查找对象的手册,不要发明属性。

根据查找和替换文本或格式设置,正确的语法如下所示:

With wdDoc.Content.Find 
.ClearFormatting 
.Text = "17.01.2020" 'your date to replace
.Replacement.ClearFormatting 
.Replacement.Text = ThisWorkbook.Worksheets("Sheet1").Range("A1").Text 'read value from sheet1 cell A1
.Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue 
End With

根据Cindys的评论,Word中存在通配符匹配,类似于使用正则表达式。

With wdDoc.Content.Find 
.ClearFormatting 
.Text = "[0-9]{2}.[0-9]{2}.[0-9]{4}"  'will match ##.##.####
.MatchWildcards = True 'makes sure the above wildcards are recognized
.Replacement.ClearFormatting 
.Replacement.Text = ThisWorkbook.Worksheets("Sheet1").Range("A1").Text 'read value from sheet1 cell A1
.Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue 
End With

由于使用的是后期绑定,因此在使用 WdFindWrap 和 WdReplace 枚举之前,必须为 WdFindWrap 和 WdReplace 枚举定义 Word 常量

Const wdReplaceAll As Long = 2
Const wdFindContinue As Long = 1

或用其值替换它们

.Execute Replace:=2, Forward:=True, Wrap:=1

或者设置对 Word 的引用并使用 eary 绑定,以便自动定义它们。

最新更新