List.Range.Text = 2
не будет true
для пустых пунктов списка.Это 1
.
Dim list As Paragraph
For Each list In ActiveDocument.ListParagraphs
If Len(Trim$(list.Range.Text)) = 1 Then
list.Range.Delete
End If
Next
РЕДАКТИРОВАТЬ: ActiveDocument
, Trim$
, как предлагается в комментариях.
Проблема заключается в том, что последний абзац в ячейке таблицы имеет маркер конца ячейки в качестве своих последних символов, и его нельзя удалить.
Общее решение состоит в том, чтобы всегда удалять последний символ из абзаца передисследуя это для длины.Поскольку абзацы, которые должны быть удалены, имеют нулевую длину, мы можем удалить их «влево» (как если бы нажата клавиша Backspace), что сохраняет маркер конца ячейки, а также работает с абзацами, которых нет в таблице.Однако это не сработает, если удаленный абзац не будет пустым:
Dim p As Paragraph
For Each p In ActiveDocument.ListParagraphs
Dim range_to_examine As Range
Set range_to_examine = p.Range
If range_to_examine.End = range_to_examine.Start + 1 Then
range_to_examine.Collapse wdCollapseStart
range_to_examine.Delete wdCharacter, -1
End If
Next