vba“.find”停止工作

vba ".find" stopped working

目前此代码运行时没有错误消息,但没有进行请求的替换:

Private Sub TestingButton_Click()

    Dim RngFound As Range
    Dim FileToProcess As Word.Document
    Dim WordInstance As Object

    Set WordInstance = CreateObject("Word.Application") 'For these tests I close Word first.
    Set FileToProcess = WordInstance.Documents.Open("c:\sarah\junk\Attach.doc")
    WordInstance.ActiveDocument.Range.Select 'Gets the whole document
    Toolbox.SetupFind (WordInstance.ActiveDocument.Range)
    With WordInstance.ActiveDocument.Range.Find
        .Text = "rock"
        .Replacement.Text = "found it!"
        .Execute
    End With

End Sub

在工具箱模块中:

 Public Function SetupFind(ByRef RngPassed As Word.Range)

   With RngPassed.Find
      .ClearFormatting
      .Replacement.ClearFormatting
      .Text = ""
      .Replacement.Text = ""
      .Forward = True
      .Wrap = wdFindContinue
      .Format = False
      .MatchCase = False
      .MatchWholeWord = False
      .MatchWildcards = False
      .MatchSoundsLike = False
      .MatchAllWordForms = False
      .Execute
    End With

End Function

上面的代码来自我为故障排除而创建的测试数据库。我的目的地是一个 Access 表单,其目的是从一组文档中提取一些信息,并将这些信息放入数据库中。它工作正常。它在一次特别壮观的碰撞后停止工作。我试图在表单处于中断模式时删除标签。 (我知道,...深感遗憾)即使使用 ctrl-break,我也无法关闭 Access。可能最奇怪的部分是类似的代码现在也不再适用于数据库的备份副本。

Here are things I've tried that haven't worked:

重新导入所有对象到一个新的database.Similarly,重建后端数据库。破坏表单的代码(几千行) 成模块。将所有代码复制到记事本中,保存,然后创建一个 新的空数据库中的按钮。通过以下方式重新创建潜艇和功能 打字,然后一旦它们存在,就从写字板粘贴代码。重启 表单的引用,其中包括 MSWord。做一个全新的表格 在新数据库中只有一个按钮显示 代码。使用定义的范围:这一切都始于我坚持不懈 RngToSearch.find.execute 查找文本中的错误:="reason"。错误 突出显示 .find 并说 'Argument not optional.' 所以等等 事情,我切换到 selection 而不是我定义的范围 试图隔离问题。但是使用范围而不是 而不是 selection 是我真正需要再次结束的地方。

Possibly relevant observations:

同一数据库中具有大量后端代码的其他表单工作正常。相同形式的其他例程也是如此。 仅打开一个文档。据我所知,这份文件没有任何异常之处。我试过多个文件。 要查找的文本存在于文档中 table 之外。

有用的东西,因为它们可能是线索: 在 Word 中,没有代码,什么都没有,使用 'find' 到 select 目标词。 WordInstance.ActiveDocument.Range.Text = 替换(WordInstance.ActiveDocument.Range.Text、"rock"、"Found it!")。问题是,我最终需要再次做的事情比 Replace 可以处理的要复杂得多。

指定替换的范围。在 TestingButton_Click() ...

中,代码从 Access 2010 开始为我工作
'.Execute
.Execute Replace:=wdReplaceAll

Toolbox.SetupFind 也调用 .Execute。由于此时查找和替换文本都是空字符串并且没有指定范围,因此 .Execute 不会造成伤害......但它似乎也没有用。