使用 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。
我正在尝试搜索 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。