【问题标题】:How can we copy between starting point and ending point in a Word document?我们如何在 Word 文档的起点和终点之间进行复制?
【发布时间】:2021-12-21 17:02:52
【问题描述】:

这是我正在测试的代码。

Sub CopySummary()
    Dim lngStart As Long
    Dim lngEnd As Long
    Dim docNew As Document
    Selection.HomeKey Unit:=wdStory
    With Selection.Find
        .ClearFormatting
        .Wrap = wdFindStop
        .MatchCase = False
        .Text = "Start"
        If .Execute = False Then
            MsgBox "'Summary' not found.", vbExclamation
            Exit Sub
        End If
        Selection.Collapse Direction:=wdCollapseEnd
        lngStart = Selection.End
        .Text = "End"
        If .Execute = False Then
            MsgBox "'End of Summary' not found.", vbExclamation
            Exit Sub
        End If
        lngEnd = Selection.Start
    End With
    ActiveDocument.Range(lngStart, lngEnd).Copy
    Set docNew = Documents.Add
    docNew.Content.Paste
End Sub

这基本上可行,但问题是“开始”和“结束”在我的文档中出现了几次。此代码仅复制第一次出现的“开始”和“结束”。我想复制所有出现的“开始”和“结束”,以及“开始”和“结束”之间的所有文本。也许循环通过标题或循环通过段落,并在这个级别进行搜索?我对 Word 的 VBA 了解不多。

【问题讨论】:

  • 我怀疑您的意思是“标题”而不是“标题”。如果是这样,请编辑您的问题。 addbalance.com/word/headersheadings.htm 如果您的标题包含您想要的内容,那么循环浏览这些内容肯定会更好。否则,您可以用特殊的段落样式标记您的文本,可能称为“摘要”,这也很容易拉出
  • 你是对的。我正在尝试了解如何遍历标题并在两个特别命名的标题之间复制文本。
  • 这里的关键是应用于文本的段落样式。您可以遍历文档中的 Styles 集合,测试样式的每个实例是否存在您的姓名。同样,除非有一个单独的原因,否则最好使用 字符样式 来标记您的开始和结束。

标签: vba ms-word


【解决方案1】:

这最终对我有用。

Sub ListPhrases()
    Dim rng As Range
    Dim strPhrases As String
    Set rng = ActiveDocument.Content
    With rng.Find
        .ClearFormatting
        .MatchWildcards = True
        .Wrap = wdFindStop
        .Text = "\Start*\End"
        Do While .Execute
            strPhrases = strPhrases & vbCr & rng.Text
        Loop
    End With
    ActiveDocument.Content.InsertAfter strPhrases
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多