如何通过VBA访问MS Word中自定义命名的列表样式?
问题结论
你写的示例代码无法直接运行,原因是ActiveDocument.ListTemplates集合按名称索引时,匹配的是「定义新多级列表」对话框中的ListNum域列表名,而非你在图形界面给列表样式设置的自定义名称。
原因说明
- Word中列表样式本身是
Style对象的一种,你设置的自定义名称是该Style对象的Name属性 - 每个列表样式会关联一个
ListTemplate对象,该对象的Name属性独立于样式名称,默认创建列表样式时该字段为空或系统自动生成,不会同步使用你给样式设的名称
两种实现方案
方案1:通过列表样式名称调用(推荐,不需要改原有设置)
直接通过样式集合获取你创建的列表样式,再取关联的ListTemplate对象使用,示例代码:
' 先判断目标列表样式是否存在 Dim targetStyle As Style On Error Resume Next Set targetStyle = ActiveDocument.Styles("MyTemp") On Error GoTo 0 If Not targetStyle Is Nothing Then ' 确认样式是列表类型 If targetStyle.Type = wdStyleTypeList Then Selection.Range.ListFormat.ApplyListTemplateWithLevel _ ListTemplate:=targetStyle.ListTemplate, _ ApplyLevel:=1 End If End If
方案2:设置ListNum域名称使原有代码生效
如果你希望直接用ActiveDocument.ListTemplates("MyTemp")的写法调用,可以按如下步骤修改设置:
- 右键你创建的「MyTemp」列表样式,选择「修改」
- 在修改样式窗口左下角点击「格式」→「编号」→「定义新的多级列表」
- 点击窗口左下角「更多」展开完整设置
- 在窗口右侧找到「ListNum域列表名」输入框,填入
MyTemp后保存所有设置
修改完成后你原来写的示例代码就可以正常运行。
内容的提问来源于stack exchange,提问作者Neits
相关产品推荐
相关产品推荐

