繁体   English   中英

VBA搜索从excel替换word文档中的文本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM