В целом, предпочтительнее работать с Range
объектами вместо Selection
. Может быть только один выбор, но код может работать с таким количеством диапазонов, сколько необходимо. Я изменил оригинальный код соответственно. Я также изменил Find.Wrap
на wdFindStop
, чтобы код просматривал весь документ, а затем останавливался.
Объект Range
имеет свойство ListParagraphs
, которое будет возвращать ListParagraph
объект (ы) Range. В этом случае это будет абзац, в котором термин Find находится , если , он принадлежит нумерованному списку. Если это так, Count
будет больше 0, и код продолжит получать Paragraph.Range
, из которого можно извлечь все абзацев, которые принадлежат списку, используя Rnage.ListFormat.List.ListParagraphs
.
Чтобы выбрать весь список, необходимо получить точку Start
первой записи списка и точку End
последней записи списка. В приведенном ниже коде диапазон абзаца, в котором был найден «Идентификатор рисунка», расширен до этих точек, чтобы охватить весь список. Обратите внимание, что неясно, что вы хотите с этим делать, как только вы это сделаете, поскольку код зацикливается. Может случиться так, что он вообще не будет выбран , но что действие должно быть выполнено над объектом Range, вместо этого ...
Sub Find_Text_withList_in_table()
Dim rngFind As Word.Range, rngFigureList As Word.Range
Dim lstParas As Word.ListParagraphs
Dim lFindCounter As Long 'for testing / debugging
Set rngFind = ActiveDocument.content
rngFind.Find.ClearFormatting
With rngFind.Find
.Text = "figure id:"
.Replacement.Text = ""
.Forward = True
.wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Do While rngFind.Find.Execute
lFindCounter = lFindCounter + 1
If rngFind.Information(wdWithInTable) Then
Debug.Print "Figure ID Found in Table"
Set lstParas = rngFind.ListParagraphs
If lstParas.Count > 0 Then
Set rngFigureList = lstParas.Item(1).Range
Set lstAllParas = rngFigureList.ListFormat.List.ListParagraphs
Debug.Print "Nr paragraphs in the list: " & lstAllParas.Count
rngFigureList.Start = lstAllParas(1).Range.Start
rngFigureList.End = lstAllParas(lstAllParas.Count).Range.End
rngFigureList.Select
MsgBox "Figure Id is in a numbered list, in a table"
End If
End If
Loop
Debug.Print "Nr Figure ID found: " & lFindCounter
Application.ScreenUpdating = True
End Sub