使用 Vbscript 中的 Find 方法搜索 Word 文件。可以找到字符但不能替换

Using Find Method in Vbscript for search Word file. Can find character but not replace

我正在尝试搜索 Word 文档并尝试找到某个字符。准确地说是 ± 字符。该代码可以找到该字符,因为如果找到它,我会将其打印到屏幕上。但是无法替换字符。

我什至尝试搜索一个我知道在文件中的随机字符串,例如“3”,并将其替换为随机字符串,例如 "dog"。但没有任何效果。它仍然可以找到字符,但不会替换。

Option Explicit
Dim objWord, objDoc, objSelection, oFSO, folder, jj, file

Set objWord = CreateObject("Word.Application")
objWord.Visible = False: objWord.DisplayAlerts = False
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set folder = oFSO.GetFolder("C:\Users\Desktop\myFolder")

For Each file In folder.Files
        objWord.Documents.Open file.path, False, True ' path, confirmconversions, readonly

        Set objDoc = objWord.ActiveDocument
        Set objSelection = objWord.Selection

        objSelection.Find.Forward = True
        objSelection.Find.MatchWholeWord = False
        objSelection.Find.Text = ChrW(177)
        objSelection.Find.Replacement.Text = "ChrW(177)"

        objSelection.Find.Execute

        If objSelection.Find.Found = True then
                Wscript.echo "Character Found"
        End If
        objDoc.close
Next
objWord.Quit
 objSelection.Find.Execute

应该是

 objSelection.Find.Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue 

(假设您要替换所有出现的地方

单词模块中的代码 运行 会将所有 "cat" 替换为 "dog"

Sub test()
Dim objdoc As Document
Dim objSelection As Range
Set objdoc = ActiveDocument
        Set objSelection = Selection.Range

        With objSelection.Find
            .Forward = True
            .MatchWholeWord = False
            .Text = "Cat"
            .Replacement.Text = "Dog"

            .Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue

            If .Found Then
                  Debug.Print "Found"
            End If
        End With
End Sub

但是您 运行 在 vbscript 中使用后期绑定,所以可能存在类型问题 - 您选择的对象可能不是一个范围而是一个变体?

问题是问题中的代码没有指定应该进行替换。这是在 Execute 方法中设置的,作为参数。

由于这是 VBScript 而不是 VBA,因此无法使用枚举(例如 wdReplaceAll)。相反,有必要指定枚举的数字等价物。 VBA 没有枚举...

objSelection.Find.Execute Replace:=2, Forward:=True, Wrap:=0

但是,VBScript doesn't accept named arguments,所以所有的参数都需要指定按位置,用"empty commas" 如果什么都不应该指定。

 objSelection.Find.Execute , , , , , , , 0, , , 2

要发现数字等效项,请参阅 VBA 对象库(VBA 编辑器中的 F2)、语言参考或使用即时 Window (Ctrl+G) VBA 编辑器像这样:?wdReplaceAll 然后按 Enter。