I only occasionally work with Word-VBA and that's only for writing in word from some cross platform application not for extensively processing any Word document. I can fairly call myself novice in Word_VBA. However, finding it interesting I went through some googling and come to learn some interesting points.
At least in Word 2007 (i am using 2007 only) there could be no paragraph within a list item (i.e.Situation 1: Second paragraph of first item). May please refer the link1 , link2 & link3.
Assuming you required to treat Manual Line Breaks as paragraph and required to have a corresponding range object,Text,List Level, List Value etc to process further, I somehow come to a working solution. It is working with a makeshift sample of 3 level of nested list and Manual Line Breaks. May try the code
Sub test()
Dim Pg As Paragraph, Sl As Long, Rng As Range, LineRng As Range
Dim PgType As String, ListNo As Long, LevelNo As Long, PgTxt As String, LIneTxt As String
Dim ManNewLine As Long, St As Long
Sl = 0
For Each Pg In ThisDocument.Paragraphs
If Pg.Range.ListFormat.List Is Nothing Then
PgType = "Normal Para"
Else
PgType = "List Para"
End If
Set Rng = Pg.Range
ListNo = Pg.Range.ListFormat.ListValue ' Document level Paragraph will return zero as ListValue.
LevelNo = Pg.Range.ListFormat.ListLevelNumber
PgTxt = Pg.Range.Text
'Add the below section code for treating Manual Line breaks as pargarph
'Start of code section
St = 1
ManNewLine = InStr(St, PgTxt, Chr(11))
If ManNewLine > 0 Then
Do While ManNewLine > 0 And St <= Len(PgTxt)
Sl = Sl + 1
LineRng.SetRange Start:=Rng.Characters(St).Start, End:=Rng.Characters(ManNewLine).End
LIneTxt = LineRng.Text
'Debug.Print St, ManNewLine, LIneTxt
'Process Paragraph based on LineRng, PgType, ListNo, LevelNo, LIneTxt, Sl
ProcessParagraph LineRng, PgType, ListNo, LevelNo, LIneTxt, Sl
St = ManNewLine + 1
ManNewLine = InStr(St, PgTxt, Chr(11))
ManNewLine = IIf(ManNewLine <= 0, Len(PgTxt), ManNewLine)
Loop
Else
Sl = Sl + 1
Set LineRng = Rng
LIneTxt = PgTxt
'Process Paragraph based on LineRng, PgType, ListNo, LevelNo, LIneTxt, Sl
ProcessParagraph LineRng, PgType, ListNo, LevelNo, LIneTxt, Sl
End If
'End of code section
Next Pg
End Sub
Private Sub ProcessParagraph(LineRng As Range, PgType As String, ListNo As Long, LevelNo As Long, LIneTxt As String, Sl As Long)
'Remark = "Para Type:" & PgType & " List No=" & ListNo & " ListLevel=" & LevelNo & "*" & LIneTxt & "*"
'Debug.Print "Sl=" & Sl & Remark
'add your code to Process Paragraph based on LineRng, PgType, ListNo, LevelNo, LIneTxt, Sl
End Sub
glad if found useful.