我有一个带有文本的单词doc,还有一个日期文本,其中显示了以下格式:
text text text 17.01.2020 text text text.
我希望将上面的日期文本替换为Excel中的一个单元格,该单元格也是一个类似于这个18.01.2020的日期。
因此,VBA代码应该执行以下操作:
1.打开word文档
2.查找文本并将其替换为Excel中的文本
3.省吃俭用。
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
我不知道在.Date和.Replacement.Cell部分应该写什么。
发布于 2020-01-17 03:14:30
问题是你的语法是错误的。.Date
和.Replacement.Cell
属性不存在于Find
对象中。一定要阅读查找对象手册,不要发明属性。
根据查找和替换文本或格式,正确的同步是这样的:
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枚举定义Word常量。
Const wdReplaceAll As Long = 2
Const wdFindContinue As Long = 1
或者用它们的价值来代替它们
.Execute Replace:=2, Forward:=True, Wrap:=1
或设置对Word的引用并使用eary绑定,以便自动定义它们。
https://stackoverflow.com/questions/59785829
复制相似问题