2

我正在编辑一个包含五个单独的项目符号列表的 Word 文档。如果我引用,在我的 VBA 代码中:

ActiveDocument.Lists(1).Range

然后它指的是文档的整个部分,从第一个列表中的第一项到最后一个列表中的最后一项。

如果对于某些人i > 1,我参考:

ActiveDocument.Lists(i)

在我的代码中,然后我得到一个错误。

如何修复我的文档,以便文档中的五个项目符号列表中的每一个都具有从 1 到 5 的不同索引?

4

2 回答 2

1

我能够通过以下方式复制:

  1. 添加项目符号列表
  2. 在列表的中间,关闭其中一项的项目符号。
  3. 在现在没有项目符号的行上键入一些文本。

当我这样做时,相应的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(上图)选择foobar线,但离开batbaz未选择。

于 2017-04-13T15:45:19.460 回答
0

根据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
于 2018-02-21T04:17:55.197 回答