Word 2010 VBA - 操作编号列表

Kev*_*ope 8 vba word-vba outlook-vba

我正在尝试在Outlook中创建一个编号列表,并根据顶级列表项操作它.不幸的是,我发现操作列表的唯一方法是通过ListParagraph类型,它可以平等地分解所有列表项(包括子项),而不是对列表中的每个级别具有不同的访问权限.

有没有办法在一个对象中访问列表项及其所有子项?

谢谢.

这是我目前使用的,适用于只有一个级别项目的列表:

    While i <= oMeetingWordDoc.Lists(1).ListParagraphs.Count
      Set oRange = oMeetingWordDoc.Lists(1).ListParagraphs(i).Range
      *Perform actions with oRange
      i = i + 1
    wend
Run Code Online (Sandbox Code Playgroud)

通过"一级"列表,我的意思是这样的:

  1. 第1项
  2. 第2项
  3. 第3项

通过带有"子项"的列表,我的意思是这样的:

  1. 清单项目1

    a)项目a
    b)项目b
    c)项目c

  2. 第2项

    a)项目a
    b)项目b

  3. 第3项

    a)项目a

Dre*_*nor 2

ListFormat.ListLevelNumber这就是您正在寻找的。ListParagraph下面是一些代码,将输出文档中每个内容的列表级别和文本:

Sub listLevels()
    Dim currentList As Range
    Dim i, numLists As Integer

    numLists = ActiveDocument.ListParagraphs.Count

    For i = 1 To numLists
        Set currentList = ActiveDocument.ListParagraphs(i).Range
        MsgBox currentList.ListFormat.ListLevelNumber & " " & currentList.Text
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)

当然,您可以使用 的条件ListLevelNumber = 1仅访问顶级列表、ListLevelNumber = 2第二级列表等。

有没有一种方法可以在一个对象中访问列表项及其所有子项?

我真的不认为有一个很好的方法来做到这一点,除非您使用递归或其他东西自己构建它(创建一个具有子数组的对象,并且每个子数组都有自己的子数组等)。我没有对此进行编码,但希望我发布的代码能让您完成您想做的事情 - 而且它要简单得多。

此外,ListFormat还有一些其他成员,如果您经常使用列表进行操作,这些成员可能会很有用 - 在对象浏览器中深入了解以了解更多信息。