在某些情况下,range.Find.Execute
会抛出错误“运行时错误5692”,有时包括范围为空时,有时在使用格式错误的正则表达式进行正则表达式搜索时。
这个错误是什么意思?错误记录在哪里吗?从我无知的立场来看,这是不可预测的。
答案 0 :(得分:3)
根据我对Word 2007的测试(在Crossover FWIW下),我认为当“查找”文本(Find.Text)包含Find.MatchWildcards标志的无效字符时会发生这种情况。该标志是粘性的,因此如果用户碰巧在最后一次手动查找或查找/替换时使用它,VBA脚本将被该粘性设置污染,当您使用诸如'^ p'之类的字符时导致运行时错误5692 Find.Text字符串中的'^ t'。在运行Find.Execute之前显式设置“Find.MatchWildcards = False”可以防止错误。您认为我们可能有一些文档或更好的错误消息。
始终失败的测试用例:
Sub ReplaceInDocument
Dim wdReplaceAll
'set the value for the replace "constant"
wdReplaceAll = 2
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "^p"
.Replacement.Text = "replacement text "
.Forward = True
.Wrap = 1
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
'the Replace argument is the 11'th argument
.Execute , , , , , , , , , , wdReplaceAll
End With
End Sub
有效的测试用例:
Sub ReplaceInDocument
Dim wdReplaceAll
'set the value for the replace "constant"
wdReplaceAll = 2
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "^p"
.Replacement.Text = "replacement text "
.Forward = True
.Wrap = 1
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
'the Replace argument is the 11'th argument
.Execute , , , , , , , , , , wdReplaceAll
End With
End Sub
答案 1 :(得分:2)
我做了一些研究,但是 - 就像你一样 - 我没有找到任何文件 It appears此错误有时可能是由于未清除查找/替换文本造成的。
我已经使用几个不同的输入测试了下面的代码,它运行时没有错误。 注意:代码需要检查工具 - >参考文献 - > Microsoft Word xx.0对象库。
Sub TextReplace()
Dim oWord As Word.Application
Dim oDoc As Word.Document
Dim oFind As Find
Set oWord = CreateObject("Word.Application")
oWord.Visible = True
Set oDoc = oWord.Documents.Add("C:\in.doc")
Set oFind = oDoc.Range.Find
oFind.Execute "foo", , , , , , , , , "bar", wdReplaceAll
oDoc.SaveAs ("C:\out.doc")
oDoc.Close
oWord.Visible = False
End Sub
如果您在运行此代码时遇到任何错误,请随时更新您的问题。