我正在编辑一个包含五个单独的项目符号列表的 Word 文档。如果我引用,在我的 VBA 代码中:
ActiveDocument.Lists(1).Range
然后它指的是文档的整个部分,从第一个列表中的第一项到最后一个列表中的最后一项。
如果对于某些人i > 1
,我参考:
ActiveDocument.Lists(i)
在我的代码中,然后我得到一个错误。
如何修复我的文档,以便文档中的五个项目符号列表中的每一个都具有从 1 到 5 的不同索引?
我正在编辑一个包含五个单独的项目符号列表的 Word 文档。如果我引用,在我的 VBA 代码中:
ActiveDocument.Lists(1).Range
然后它指的是文档的整个部分,从第一个列表中的第一项到最后一个列表中的最后一项。
如果对于某些人i > 1
,我参考:
ActiveDocument.Lists(i)
在我的代码中,然后我得到一个错误。
如何修复我的文档,以便文档中的五个项目符号列表中的每一个都具有从 1 到 5 的不同索引?
我能够通过以下方式复制:
当我这样做时,相应的List
条目包含中间的非项目符号线的范围。
我认为对您的问题最现实的答案是将您的文档保存为纯文本文件,打开它,然后在您想要的位置重新应用项目符号。我在网上找不到任何关于拆分现有List
.
List
也就是说,据我所知,a 范围内的非项目符号线Range.ListFormat.ListTemplate
等于Nothing
,与项目符号线不同。因此,一种选择是遍历您的List
记录并存储单独的范围,基于ListTemplate
. 例如,以下函数选择Lists(1)
直到第一个非项目符号行的行(快速破解;YMMV):
Public Sub SelectList1()
Dim r As Range
Set r = ActiveDocument.Lists(1).Range
Dim p As Paragraph, foundit As Boolean
foundit = False
For Each p In r.Paragraphs
If p.Range.ListFormat.ListTemplate Is Nothing Then
foundit = True
Exit For
End If
Next p
If foundit Then
r.End = p.Range.Start
End If
r.Select
End Sub
例如,使用如上所述创建的此列表:
* foo
* bar
bat
* baz
Lists(1).Range
包括foo
通过baz
,包括介入bar
。运行SelectList1
(上图)选择foo
和bar
线,但离开bat
和baz
未选择。
根据MSDN:
列表对象:表示已应用于文档中指定段落的单个列表格式。
因此,如果您有多个列表,中间有一些非项目符号段落,Range
则将从第一个列表的第一项开始,以最后一个列表的最后一项结束,包括所有非项目符号段落) 在中间。
要解决此问题,您需要分离列表(右键单击项目符号并选择分离列表)。
如果您想在不修改文档的情况下在代码中执行此操作,则必须遍历Range
每个段落的段落List
并检查它是否具有ListFormat.ListTemplate
表明它是列表项的 a ,否则它是非项目符号段落。类似于cxw 的 answer,但如果您有多个列表,请遍历所有列表。
此函数突出显示所有列表项并忽略中间的非项目符号段落:
Sub HighlightLists()
Dim li As Word.List
Dim p As Paragraph
For Each li In ActiveDocument.Lists
For Each p In li.Range.Paragraphs
If Not p.Range.ListFormat.ListTemplate Is Nothing Then
p.Range.HighlightColorIndex = wdYellow
End If
Next p
Next li
End Sub