How to find out the number, or list level, or outline level, that is applied to a list-numbered paragraph, using VBA
Article contributed by Dave Rado
Figure 1
List number
You can get the number that has been applied to any list-numbered paragraph using the ListString property – for example:
MsgBox Selection.Paragraphs(1).Range.ListFormat.ListString
So if you run this code on the paragraphs in Figure 1, it will return
nothing, 1, 1.1, and nothing, respectively.
List level
“List level” means the level in a numbering outline: so in Figure 1, the first and last paragraphs would have no list level, and the middle two would usually have list levels of 1 and 2 respectively.
You can get the list level that has been applied to any list-numbered paragraph using the ListLevelNumber property; for example:
MsgBox Selection.Paragraphs(1).Range.ListFormat.ListLevelNumber
Unfortunately, a paragraph that has no list numbering applied returns 1 – whereas it really ought to return nothing or 0, or 10, or 9999, or something that indicates that it has no List Level – but certainly not 1. This is a bug. So to distinguish unnumbered paragraphs from paragraphs which genuinely have a List Level of 1, you have to use something like:
If Selection.Paragraphs(1).Range.ListParagraphs.Count = 1Then
MsgBox Selection.Paragraphs(1).Range.ListFormat.ListLevelNumber
Else
MsgBox "Not a numbered paragraph"
End If
Outline Level
Confusingly, perhaps, the Outline Level of a paragraph (in Word terminology) has nothing whatsoever to do with numbering, except in a tangential sense. The “Outline Level” really means the Heading level, or in other words, the level at which the paragraph appears in Outline View. It is the property that you see in the Format + Paragraph dialog, under Outline Level.
All built-in heading styles have an outline level, (Level 1 for a main heading, Level 2 for a subheading, and so on), whether they are numbered or not; and if you create your own Heading styles, they too will have an outline level, whether they are numbered or not. That is the difference between heading styles and all other styles; a Heading style is simply any style that has an Outline Level between 1 and 9. Conversely, outline numbered body text does not have an Outline Level (or to be more exact, its Outline Level is Body Text). So don't confuse the List Level and the Outline Level properties – they are very different beasts. In the case of numbered Headings, the Outline Level and List Level of the paragraph will be identical. But only in the case of numbered Headings.
You can get the outline level of any paragraph using the OutlineLevel property; for example:
MsgBox Selection.Paragraphs(1).OutlineLevel
If the OutlineLevel is “Body Text”, this code returns 10. So in Figure 1, the first and last paragraphs would return 1 and 2 respectively, and the middle two paragraphs would return 10.