[英]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.