【发布时间】: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 集合,测试样式的每个实例是否存在您的姓名。同样,除非有一个单独的原因,否则最好使用 字符样式 来标记您的开始和结束。