Word 2010 VBA - 操作编号列表

时间:2011-12-08 00:19:23

标签: 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

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

  1. 第1项
  2. 第2项
  3. 第3项
  4. 带有'子项'的列表我的意思是这样的:

    1. 列出项目1

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

    2. 第2项

      a)项目a b)项目b

    3. 第3项

      a)项目a

2 个答案:

答案 0 :(得分:3)

我发现ListFormat.ListLevelNumber不可靠。

我有一个文件,有人发给我一个项目符号列表,其中一个项目下有一个嵌套(第2级)列表。嵌套列表包含3个子项。只有子项2报告它是ListLevelNumber 2.其他人继续报告ListLevelNumber = 1.

另一方面,报告错误列表级别的子项将ListFormat.ListString设置为列表级别2中使用的字符,因此您可以通过选中这两个来解决此问题。

答案 1 :(得分: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

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

  

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

我真的不认为这是一个很好的方法,除非你自己使用递归或其他东西构建它(创建一个带有子数组的对象,每个子节点都有自己的子数组等)。我没有这个编码,但希望我发布的代码可以让你完成你想做的事情 - 而且它更简单。

此外,ListFormat还有一些其他成员,如果你在对象浏览器中进行大量工作以了解更多信息,那么它们可能会非常有用。