【问题标题】:Range.Find fails when searching for a Heading Style next to a Table搜索表格旁边的标题样式时 Range.Find 失败
【发布时间】:2020-11-25 18:51:48
【问题描述】:

我需要在大型文档中执行查找,以修复“标题 1”标题从大写到标题大小写的情况。我写了以下代码来演示目的(包括一些丑陋的步骤来帮助调试):

Sub FixHeadings()
    Dim doc As Word.Document
    Dim rng As Word.Range
    
    Set doc = ActiveDocument
    Set rng = doc.Content
        
    With rng.Find
        .Format = True
        .Style = doc.Styles("Heading 1").NameLocal
        .Forward = True
        
        Do While .Execute
            rng.Case = wdTitleWord
            rng.Style = doc.Styles("Heading 1").NameLocal
            resp = MsgBox(rng.Text & vbNewLine & vbNewLine & "Text was found, continue?", vbQuestion & vbYesNoCancel)
            If resp = vbNo Then
                Exit Do
            ElseIf resp = vbCancel Then
                foo = True
            End If
        Loop
    End With
End Sub

我遇到的问题:如果表格紧跟标题,则查找卡在当前标题上,无法继续前进。在我添加调试行之前,这会使 Word 挂起。

代码在表格不跟随标题的文本上工作正常。但是,我不控制文档的格式,也不能假设会包含空白段落。我确实发现确实有帮助,但我不能再次假设这一点。

我会使用 Find All 和 Replacement 属性,但它不支持 Case。此外,我尝试使用 Goto 将指针微移到 Heading 之外,但无济于事。

可以做什么?这是一个错误吗?我应该检测下一个表是否是下一个并以某种方式采取行动吗?如果是,应该采取什么行动?

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    简单:将范围折叠到末尾,按照:

    Sub FixHeadings()
    Dim Resp
    With ActiveDocument.Range
      With .Find
        .Format = True
        .Forward = True
        .Style = wdStyleHeading1
      End With
      Do While .Find.Execute = True
        .Case = wdTitleWord
        Resp = MsgBox(.Text & vbNewLine & vbNewLine & "Text was found, continue?", vbQuestion & vbYesNoCancel)
        If Resp = vbNo Then
          Exit Do
        ElseIf Resp = vbCancel Then
            'foo = True
        End If
        If .End = ActiveDocument.Range.End Then Exit Do
        .Collapse wdCollapseEnd
      Loop
    End With
    End Sub
    

    【讨论】:

    • 谢谢!这让我达到了 99% 的目标。我有一个有趣的故障。即使文档没有以这种方式开始,并且我导入的子文档也没有以标题 1 结尾,但似乎出现在末尾。不过,我已经解决了这个问题。
    • 查看代码编辑(如果 .End = ActiveDocument.Range.End Then Exit Do)以处理文档结尾的样式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2012-01-02
    • 2013-06-26
    • 2015-03-17
    • 1970-01-01
    相关资源
    最近更新 更多