[英]Find/Replace Text from Headers in a Word Document Using VBA in Excel
[英]VBA search replace text in word document from excel
我正在尝试制作一个可以粘贴要搜索和替换的单词列表的 excel 文档。 我想用excel文档在word文档中搜索替换这些单词。
我在使代码运行时遇到问题。
Sub SearchReplace()
Dim WordDoc As Object, N As Variant, i As Integer, j As Integer
i = Range("C2").Value 'pulls length of list from an excel function located in cell C2
N = Range("B4:C" & CStr(i + 3)).Value
Set WordDoc = CreateObject(Class:="Word.Application")
WordDoc.Visible = True
WordDoc.Documents.Open Filename:="C:\WordTest.docm"
WordDoc.Activate
With WordDoc.ActiveDocument
For j = 1 To i
With .Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.MatchWildcards = False
.Wrap = wdFindContinue
.Text = N(1, j)
.Replacement.Text = N(2, j)
.Execute
End With
End With
Next j
End With
WordDoc.Quit
Set WordDoc = Nothing
End Sub
我根据建议更正了代码,不再出现任何错误。 但是,该代码似乎没有在指定的 Word 文档中查找和替换任何内容。 我试图通过输入特定单词“text”和特定单词“replace”来简化代码以检查查找和替换部分,以在包含单词“text”的单词文档中查找和替换。 这仍然没有改变。 我删除了关闭文档的行,以防问题是文档在更新后没有保存,但这也没有成功,所以我将 WordDoc.Quit 添加回代码中。
Sub SearchReplace()
Dim WordDoc As Object, N As Variant, i As Integer, j As Integer
i = Range("C2").Value 'pulls length of list from an excel function
located in cell C2
N = Range("B4:C" & CStr(i + 3)).Value
Set WordDoc = CreateObject(Class:="Word.Application")
WordDoc.Visible = True
WordDoc.Documents.Open Filename:="C:\WordTest.docm"
WordDoc.Documents("WordTest.docm").Activate
With WordDoc.ActiveDocument
For j = 1 To i
With .Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.MatchWildcards = False
.Wrap = 1
.Text = "text" 'N(j, 1)
.Replacement.Text = "replace" 'N(j, 2)
.Execute 2
End With
End With
Next j
End With
WordDoc.Quit
Set WordDoc = Nothing
End Sub
我能够让代码发挥作用。 该代码使用存储在代码数组中的 Excel 工作表中的查找替换字符串列表(B4:B5004(查找)、C4:C5005(替换))从 Excel 中搜索指定的 Microsoft Word 文档。
为了使代码发挥作用,我必须包含 Microsoft Word 16 对象库。
从 Excel VBA 编辑器窗口。 工具 > 参考然后确保选中 Microsoft Word 16.0 对象库。
Option Explicit
Sub SearchReplace()
Dim WordApp As Object, WordDoc As Object, N As Variant, i As Integer, j As Integer
i = Range("C2").Value 'pulls length of list from an excel function located in cell C2 =COUNTIF(B4:B5005,"*")
N = Range("B4:C" & CStr(i + 3)).Value
Set WordApp = CreateObject(Class:="Word.Application")
Set WordDoc = WordApp.Documents.Open("C:\WordTest.docm")
WordDoc.Visible = True
For j = 1 To i
With WordApp
With WordDoc.Content.Find
.Text = N(j, 1)
.Replacement.Text = N(j, 2)
.Wrap = wdFindContinue
.MatchWholeWord = True
.Execute Replace:=wdReplaceAll
End With
End With
Next j
WordApp.ActiveDocument.Save
WordApp.ActiveDocument.Close
WordApp.Quit
Set WordApp = Nothing
Set WordDoc = Nothing
End Sub
“编译错误:变量未定义”问题是由于您使用了带有命名 Word 常量的后期绑定。 要么改变
.Wrap = wdFindContinue
到:
.Wrap = 1
或插入:
Const wdFindContinue as Long = 1
在代码的顶部。
无论如何,就目前而言,您现有的代码不会替换任何内容。 代替:
.Execute
你需要:
.Execute 2
或者:
.Execute wdReplaceAll
(替换所有实例)或:
.Execute 1
或者:
.Execute wdReplaceOne
(仅替换第一个实例)
与 wdFindContinue 一样,您需要补充 wdReplaceAll 或 wdReplaceOne:
Const wdReplaceAll as Long = 2
或者:
Const wdReplaceOne as Long = 1
作为适当的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.