我有一个带有文本的单词文档,其中还有一个日期文本显示这种格式:
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 绑定,以便自动定义它们。