Word 2010 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

списки с подпунктами-я имею в виду что-то вроде этого:

  1. элемент списка 1

    a) пункт a
    b) пункт b
    с) пункт c

  2. пункт 2

    a) пункт a
    b) пункт b

  3. пункт 3

    a) пункт a

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 для второго уровня, etc.

есть ли способ получить доступ в одном объекте к элементу списка вместе со всеми его подпунктами?

Я не думаю, что есть отличный способ сделать это, если вы строите его вы используете рекурсию или что-то еще (создайте объект с массивом детей, и каждый ребенок с его собственным массивом детей и т. д.). Я не закодировал это, но надеюсь, что код, который я разместил, позволит вам выполнить то, что вы хотите сделать, - и это намного проще.

и ListFormat также есть некоторые другие члены, которые могут быть полезны, если вы делаете много со списками - копаться в браузере объектов, чтобы узнать больше.


Я нашел ListFormat.ListLevelNumber недостоверной.

У меня есть документ, который кто-то послал мне с маркированным списком, который имеет вложенный (Уровень 2) Список под одним из элементов. Вложенный список содержит 3 подпозиции. Только подпункт 2 сообщает, что это ListLevelNumber 2. Остальные продолжают сообщать ListLevelNumber = 1.

на боковой ноте подэлементы, которые сообщают о неправильном уровне списка, имеют ListFormat.ListString устанавливается на символ, используемый на уровне 2 список, поэтому вы можете обойти проблему, проверив оба.