使用 Excel VBA 在 Word 中查找和替换不替换

Find and replace in Word using Excel VBA doesn't replace

我正在使用 Excel VBA 宏将模板文档中的单词替换为 Excel 传播sheet 中的文本。格式很简单;在 Excel 列 A 中有搜索词,在 B 列中有替换文本,在 Word 中,文档有 {searchterm} 占位符。我遍历 Excel sheet,在 A 和 B 中查找具有有效数据的行并找到替换。完整代码:

On Error Resume Next
Set wApp = GetObject(, "Word.Application")
If Err.Number <> 0 Then
     Set wApp = CreateObject("Word.Application")
End If
On Error GoTo 0
Temp = Application.ActiveWorkbook.Path
Set wDoc = wApp.Documents.Open(Temp & "\Type some stuff.docx")
If wDoc Is Nothing Then
    MsgBox "Could not find the template file at: " & Temp & "\Type some stuff.docx"
    Exit Sub
End If
On Error Resume Next
wDoc.SaveAs Temp & "\Replaced some stuff.docx"
On Error GoTo 0
If wDoc Is Nothing Then
    MsgBox "Could not save the word file at: " & Temp & "\Replaced some stuff.docx"
    Exit Sub
End If

For R = 1 To LastR
    ST = WS.Cells(R, 1)
    RT = WS.Cells(R, 2)
    'and if they are OK, use find/replace
    If Len(ST) > 1 And Len(RT) > 1 Then
        wDoc.Content.Find.Execute Wrap:=wdFindContinue, FindText:="{" & ST & "}", ReplaceWith:=RT, Replace:=wdReplaceAll
        didSome = wDoc.Content.Find.found
    End If
Next R
wDoc.Save
wDoc.Close
Set wApp = Nothing

所有值均有效:wDoc 是一个 word 文档,其中包含“这是要更改的内容。{item1} 是否有效。”,ST 是“item1”,RT 是“替换项目 1”。 LastR 是 3。代码贯穿所有行 - 它不会提前退出或任何其他内容。这将按预期创建文件“New document.docx”,但文本尚未被替换。检查 didSome 总是 returns 错误。

我从 MS 的 Find.Execute 页面拿了这个例子,只改变了换行。我错过了什么?

在将单词对象定义为后期绑定对象(使用 CreateObject 创建)时,您犯了一个引用单词枚举的经典错误 'wdFindContinue'。这意味着 wdFindContinue' 将具有值 0 而不是 wdFindWrap 枚举中定义的值 1。

因此,您要么需要将 wdFindContinue 替换为文字“1”,要么将 wdFindContinue 定义为值为 1 的常量,或者通过添加对 Word 对象的引用来更改为对 Word 对象使用早期绑定引用来自 Tools.References.