首页 > 解决方案 > 如何在 VBA Excel 的 Word 文档中正确应用 .Find?

问题描述

我正在尝试在 Word 文档(FromDoc)中找到使用以下代码设置Appendix A样式的字符串。Heading 1我在 MS Word VBA 编辑器中开发了代码并且工作得很好……直到我把它移到 Excel VBA 中。

由于我将代码插入到 Excel VBA 中,因此我发现前者在 Excel VBA 中不起作用,因此已替换为.SelectionActiveDocument.Range但是,现在 Execute 方法找不到Appendix A. 我花了很多时间进行故障排除,包括阅读 StackOverflow 的帖子,但无济于事。

' Activate FromDoc
oApp.Visible = True
oApp.ActiveWindow.Activate
FromDoc.Activate

' Find Appendix A

With ActiveDocument
    .Range.WholeStory
    .Range.Collapse wdCollapseStart
    .Range.Find.ClearFormatting

    With .Range.Find
        .Style = ActiveDocument.Styles("Heading 1")
        .Text = "Appendix A"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = True
    End With

    .Range.Find.Execute
    .Collapse wdCollapseStart

    Dim r1 As Range
    Set r1 = .Range

End With

我也对Set r1 = .Range. 我担心它也可能不起作用。

感谢您在理解和纠正问题方面的帮助。

标签: excelvbams-wordfind

解决方案


您的许多代码没有任何用处。对于您所描述的,Word 不需要可见并且您不需要激活文档;您也不需要设置新范围。所有你需要的是:

With FromDoc
  With .Range
    With .Find
      .ClearFormatting
      .Style = "Heading 1"
      .Text = "Appendix A"
      .Format = True
      .Forward = True
      .Wrap = 1 'wdFindContinue
      .MatchCase = False
      .MatchWholeWord = True
      .Execute
    End With
    With .Duplicate
      .Collapse 1 'wdCollapseStart
      'do whatever it is you want to do before the Appendix A heading.
    End With
  End With
End With

请注意,我提供了 wdFindContinue 和 wdCollapseStart 的数值;除非您首先声明它们,否则您不能将命名常量与后期绑定(如果您正在使用的话)一起使用。


推荐阅读