vba“.find”停止工作

时间:2016-02-06 18:39:20

标签: vba ms-access ms-word ms-access-2007

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

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。可能最奇怪的是,类似的代码现在不再适用于数据库的备份副本。

  

以下是我尝试过但没有奏效的事情:

将所有对象重新导入新数据库。同样,重建后端数据库。打破表单的代码(几千行)  进入模块。将所有代码复制到记事本中,保存,然后创建一个     一个新的空数据库中的按钮。重新创建潜艇功能     键入,然后一旦存在,粘贴从Wordpad的代码。重启     表单的引用,包括MSWord。制作一个全新的形式     在新数据库中,只有一个按钮只显示     码。使用定义的范围:这一切都是在我获得持久性时开始的     RngToSearch.find.execute中的错误:findtext:=“reason”。错误     突出显示.find并说'参数不是可选的'。除此之外     事情,我切换到选择而不是我的定义范围     试图孤立问题。但是与一个范围合作     而选择是我真正需要再次结束的地方。

  

可能相关的观察结果:

同一数据库中的其他表单有很多后端代码可以正常工作。所以其他例程也是如此。 只有一个文件是开放的。据我所知,这份文件并没有什么不寻常之处。我试过多个文件。 要查找的文本存在于表格外的文档中。

有效的事情,因为它们可能是线索: 直接在Word中,没有代码,没有任何代码,使用“查找”来选择目标单词。 WordInstance.ActiveDocument.Range.Text =替换(WordInstance.ActiveDocument.Range.Text,“摇滚”,“找到它!”)。麻烦的是,我最终需要再次做的事情比替换可以处理的更复杂。

1 个答案:

答案 0 :(得分:1)

指定替换的范围。代码在Access 2010中为我提供了TestingButton_Click() ...

中的此更改
'.Execute
.Execute Replace:=wdReplaceAll

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