我正在编辑一个Word文档,其中包含五个单独的项目符号列表。如果我在我的VBA代码中引用:
ActiveDocument.Lists(1).Range
然后它引用文档的整个部分,从第一个列表中的第一个项目到最后一个列表中的最后一个项目。
对于某些i > 1
,我引用:
ActiveDocument.Lists(i)
在我的代码中,然后我收到错误。
我如何修复我的文档,以便我的文档中的五个项目符号列表中的每一个都有不同的索引,从1到5?
答案 0 :(得分:1)
我能够通过以下方式复制:
当我这样做时,相应的List
条目包含范围,包括中间的非项目符号行。
我认为对您的问题最真实的答案是将您的文档保存为纯文本文件,将其打开,并将子弹重新应用到您想要的位置。我没有在网上找到任何关于拆分现有List
的内容。
据说,据我所知,List
范围内的非项目符号行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
。
答案 1 :(得分:0)
根据MSDN:
列出对象:表示已应用于文档中指定段落的单个列表格式。
因此,如果您有多个列表中间包含一些非项目符号的段落,Range
将从第一个列表的第一个项目开始,以最后一个列表的最后一个项目结束包括中间所有没有项目符号的段落。
要解决此问题,您需要将列表分开(右键单击项目符号并选择单独列表)。
如果您想在不修改文档的情况下在代码中执行此操作,则必须迭代每个Range
的{{1}}段落,并检查它是否有List
表示它是一个列表项,否则它是一个非项目符号段落。与cxw's answer类似,但如果您有多个列表,则迭代所有列表。
此功能突出显示所有列表项并忽略中间的非项目符号段落:
ListFormat.ListTemplate