繁体   English   中英

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。 也许最奇怪的部分是,现在类似的代码也不再在数据库的备份副本中起作用。

这是我尝试过的未成功的事情:

将所有对象重新导入到新数据库中。同样,重建后端数据库。 将表单的代码(几千行)分成模块。 将所有代码复制到记事本中,保存,然后在新的空数据库中创建一个按钮。 通过键入来重新创建子函数,然后将它们存在,然后从写字板中粘贴代码。 重置窗体的引用,其中包括MSWord。 使用一个仅显示代码的按钮在新数据库中创建一个全新的表单。 使用定义的范围:当我在RngToSearch.find.execute findtext:=“ reason”中遇到持续错误时,所有这些都开始了。 错误突出显示.find并显示“参数不是可选的”。 因此,除其他外,我尝试选择问题而不是定义范围来隔离问题。 但是我真正需要再次选择一个范围而不是一个选择。

可能相关的观察结果:

同一数据库中具有大量后端代码的其他表单也可以正常工作。 同样形式的其他例程也是如此。 仅打开一个文档。 据我所知,该文档没有什么异常之处。 我已经尝试了多个文档。 要查找的文本存在于文档中表格的外部。

可能已经奏效的事情可能是线索:在Word中,没有代码,什么也没有,请使用“查找”来选择目标单词。 WordInstance.ActiveDocument.Range.Text =替换(WordInstance.ActiveDocument.Range.Text,“摇滚”,“找到了!”)。 麻烦的是,我最终需要再次做的是比Replace所能处理的复杂得多。

指定替换范围。 该代码从Access 2010开始为我工作,其中TestingButton_Click()更改...

'.Execute
.Execute Replace:=wdReplaceAll

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM