使用Word VBA删除最后一个列表项

时间:2011-12-19 16:29:13

标签: vba ms-word word-vba

我正在尝试从带有VBA的Word中的项目符号列表中删除最后一个项目符号/项目。

可以使用以下代码获取空项目,但我不知道如何删除这些项目:

For Each List In ActiveDocument.ListParagraphs
    If Len(List.Range.Text = 2) Then
    'Delete this list Item
    End If
Next

这是列表的一个例子:

  • 第1项
  • 第2项
  • 第3项

我已经尝试通过Range.Text.Select选择项目,但这不起作用。

欢迎任何建议,提前谢谢。

编辑:

问题是删除整个列表项,包括列表项目符号。 list.Range.Delete不起作用,看起来宏甚至崩溃了。

消息框只出现一次,即使文档中有多次出现,如果我删除list.Range.Delete,每个空白项目都会出现一次。

Dim list As Paragraph

For Each list In ActiveDocument.ListParagraphs
    MsgBox Len(list.Range.Text)
    If Len(list.Range.Text) = 2 Then
        MsgBox "DELETE"
        list.Range.Delete
    End If
Next

1 个答案:

答案 0 :(得分:1)

对于空列表段落,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

编辑: ActiveDocumentTrim$,如评论中所示。

问题是表格单元格中的最后一个段落有一个单元格结束标记作为其最后一个字符,并且可能无法删除。

通用解决方案是在检查段落的长度之前始终从段落中删除最后一个字符。因为应该删除的段落长度为零,我们可以将它们“向左”删除(就像按下退格键一样),它保留了单元格结束标记,也适用于不在表格中的段落。但是,如果删除的段落不为空,则无效:

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