【问题标题】:Range.Find.Execute fails in word 2013Range.Find.Execute 在 word 2013 中失败
【发布时间】:2014-04-02 10:56:23
【问题描述】:

考虑 Word 2013 中的下表

A BBB
A CCC
D E F

A、B 和 C 是合并的单元格。

A 和 B 是空的。 C里面有文字A

下面的代码

Set rng = ActiveDocument.Range(0, 0)  
With rng.Find
    .Forward = True
    .Wrap = wdFindStop
    .Execute "A"
End With

Execute "A" 上崩溃。

如果我将文本更改为Execute "B",它不会找到任何内容,但不会导致单词崩溃。问题仅出现在 word 2013 中。

我们尝试过手动搜索和Selection.Find逐个单元格搜索,但是这两个都相当慢。

有没有快速的方法来规避这个错误?

编辑:这是我构建的最小失败示例。在我们的应用程序中,我们使用了很多 Range.Find,有时使用 wrap 并且几乎从不从 Document.Start 开始

EDIT2:进一步调查表明,如果您以兼容模式(Word 97-2003 格式)打开 Document,则不会出现错误。

【问题讨论】:

  • 假设在这种情况下您不必避免使用 Selection.Find,那么 Range.Find 版本会做什么,例如选择整个文档或表格不适合您? (FWIW 我也看到了错误,使用 .Execute2007 也会使 Word 崩溃)。
  • 您希望得到什么答案?我确实也检查了您的问题,但它也不适用于我。因此,我认为这是一个我们无法解决的简单“错误”。而且您似乎有一个使用selection.find 功能的解决方案。您提出的赏金目标是什么?
  • A、B、C如何合并,但A、B为空?屏幕截图可以帮助我更好地理解,谢谢。
  • @PortlandRunner 板条箱表 3x3。合并第一列中的两个单元格,独立合并第二行和第三行中的最后两个单元格。
  • 这是possible related issue。他们谈论查看 Windows 事件查看器以查找与崩溃相关的特定应用程序错误。即使该问题与您的问题不同,查看这些日志也可能会有所帮助。您可以通过单击“开始”--->“运行”来调出事件查看器,然后输入“eventvwr.msc”并回车。

标签: vba ms-word word-2013


【解决方案1】:

您不能只激活.Find 对象而不是范围对象吗?

如果您只是从 ActiveDocument 而非 Table 对象中激活 .Selection 对象,那么这可能需要很长时间。但是直接从表索引中取出会显着加快速度。

ActiveDocument.Tables(1).Select
With Selection.Find
    .Forward = True
    .Wrap = wdFindStop
    .Execute FindText:="A"
End With

【讨论】:

  • 问题是你需要做很多这样的事情,如果你正在寻找不存在的东西。选择表格之间的文本,选择表格,重复。我们之前尝试过,它实际上比直接选择直到结束方法要慢。
  • 那么您应该在单独的代码段中为表格迭代表格,然后再为文档进行第二组代码。如果你不断消除可能性,从长远来看,它将限制你的编程能力范围。
  • 如果您指定确切的表格,则不必搜索文档中的其余表格。
猜你喜欢
  • 1970-01-01
  • 2015-02-26
  • 2020-04-24
  • 2022-12-05
  • 2015-04-08
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
相关资源
最近更新 更多