在word中可以为段落添加项目符号或者编号列表。
项目符合或者编号列表都属于一级列表,此外还可以为word段落添加多级列表。
在vba中,每个连续的项目符号或者编号列表或者多级列表构成了一个List对象。
所有List对象组合在一起构成了Lists集合对象。
当用For Each ..In语句遍历Lists集合对象时,它是按照从文档的末尾到开头的方向进行遍历的,这点要特别注意。
以下vba代码举例演示了如何遍历当前word文档中的所有列表,从文档末尾往文档开始方向遍历:
Sub QQ1722187970() Dim oDoc As Document Set oDoc = Word.ActiveDocument Dim oRng As Range Dim oList As List Dim oListFormat As ListFormat Dim oP As Paragraph '从文档末尾往文档开头遍历 MsgBox oDoc.Lists.Count For Each oList In oDoc.Lists With oList .Range.Select End With Next End Sub
每个List对象可以由多个具有项目符合或者编号列表或者多级列表的段落组成,要获得具体的List对象所具有的段落集合,可以使用ListParagraphs属性返回具体的List对象所具有的段落集合对象。
这里要特别注意的是只有应用了项目符合或者编号列表或者多级列表的段落才属于ListParagraphs,没有应用的属于普通的段落。
以下vba代码举例演示了如何遍历当前word文档中的所有列表所具有的段落数:
Sub QQ1722187970() Dim oDoc As Document Set oDoc = Word.ActiveDocument Dim oRng As Range Dim oList As List Dim oListFormat As ListFormat Dim oP As Paragraph '从文档末尾往文档开头遍历,先弹出总的列表数 MsgBox oDoc.Lists.Count For Each oList In oDoc.Lists With oList '获取每个List对象所占据的段落集合所含的段落数 MsgBox .ListParagraphs.Count End With Next End Sub
要为具体的List对象应用哪种项目符合,编号列表或者多级列表格式,需要使用ListFormat对象。
以下vba代码举例演示了如何遍历当前word文档中的所有列表,并将列表全部改为默认的项目符合格式:
Sub QQ1722187970() Dim oDoc As Document Set oDoc = Word.ActiveDocument Dim oRng As Range Dim oList As List Dim oListFormat As ListFormat Dim oP As Paragraph '从文档末尾往文档开头遍历,先弹出总的列表数 MsgBox oDoc.Lists.Count For Each oList In oDoc.Lists With oList .Range.ListFormat.ApplyBulletDefault End With Next End Sub
如果原来的List对象就已经是默认的项目符合格式了,那么再次使用ApplyBulletDefault,将取消列表格式,这点要特别注意。
在用vba处理word的项目符号、编号列表或者多级列表时,最常用的两个操作就是将项目符号、编号列表或者多级列表转换为静态的文本,或者移除所有项目符号、编号列表或者多级列表。
将项目符号、编号列表或者多级列表转换为静态的文本,可以使用ConvertNumbersToText方法,要移除所有的项目符号、编号列表或者多级列表可以使用RemoveNumbers方法。
以下vba代码举例演示了如何将所有列表转换为静态文本:
Sub QQ1722187970() Dim oDoc As Document Set oDoc = Word.ActiveDocument Dim oRng As Range Dim oList As List Dim oListFormat As ListFormat Dim oP As Paragraph '从文档末尾往文档开头遍历,先弹出总的列表数 MsgBox oDoc.Lists.Count For Each oList In oDoc.Lists With oList Set oListFormat = .Range.ListFormat With oListFormat .ConvertNumbersToText End With End With Next End Sub
以下vba代码举例演示了如何移除所有的列表:
Sub QQ1722187970() Dim oDoc As Document Set oDoc = Word.ActiveDocument Dim oRng As Range Dim oList As List Dim oListFormat As ListFormat Dim oP As Paragraph '从文档末尾往文档开头遍历,先弹出总的列表数 MsgBox oDoc.Lists.Count For Each oList In oDoc.Lists With oList Set oListFormat = .Range.ListFormat With oListFormat '移除所有的项目符号、编号列表、多级列表 .RemoveNumbers End With End With Next End Sub
如果要返回具体的列表编号字符串,可以使用ListString属性。
以下vba代码举例演示了如何获取当前选中内容所在的列表的项目编号的字符串:
Sub QQ1722187970() Dim oDoc As Document Set oDoc = Word.ActiveDocument Dim oRng As Range Dim oList As List Dim oListFormat As ListFormat Dim oP As Paragraph Set oRng = Word.Selection.Range With oRng '获取当前选中内容所在的第一个列表项目编号的字符串,比如"2.3.1" MsgBox .ListFormat.ListString End With End Sub
发表评论