“运行时错误5692”是什么意思?

时间:2010-10-05 20:16:49

标签: vba runtime-error

在某些情况下,range.Find.Execute会抛出错误“运行时错误5692”,有时包括范围为空时,有时在使用格式错误的正则表达式进行正则表达式搜索时。

这个错误是什么意思?错误记录在哪里吗?从我无知的立场来看,这是不可预测的。

2 个答案:

答案 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

如果您在运行此代码时遇到任何错误,请随时更新您的问题。