使用VBA在MS Word多级列表标题中插入文本
大约6个月前,我请求论坛提供帮助,但我的问题只得到了部分解决。我希望有人能帮助我认识到在我创建的代码中我的错误发生在哪里 我的问题是,我想使用VBA在多级列表标题中的英语字符串之前插入非常简短的标准文本。这些标题作为样式存在于我的~600页文档中使用VBA在MS Word多级列表标题中插入文本,vba,ms-word,Vba,Ms Word,大约6个月前,我请求论坛提供帮助,但我的问题只得到了部分解决。我希望有人能帮助我认识到在我创建的代码中我的错误发生在哪里 我的问题是,我想使用VBA在多级列表标题中的英语字符串之前插入非常简短的标准文本。这些标题作为样式存在于我的~600页文档中 Public Sub InsertFOUOH1() 'Inserts U//FOUO before all first order Headings) 'Macro works on whole document Dim doc As Docu
Public Sub InsertFOUOH1()
'Inserts U//FOUO before all first order Headings)
'Macro works on whole document
Dim doc As Document
Dim para As Paragraph
Const MyText = "(U//FOUO) "
Application.ScreenUpdating = False
Set doc = ActiveDocument
For Each para In doc.Paragraphs
If para.Style = doc.Styles(wdStyleHeading1) Then
para.Range.InsertBefore (MyText)
End If
Next para
End Sub
例如,我有:
1.1.1敏捷的棕色狐狸
我想要的是:
1.1.1(XXxx)敏捷的棕色狐狸
我创建了这个宏,然后为文档中的6个标题级别中的每一个进行了自定义
Public Sub InsertFOUOH1()
'Inserts U//FOUO before all first order Headings)
'Macro works on whole document
Dim doc As Document
Dim para As Paragraph
Const MyText = "(U//FOUO) "
Application.ScreenUpdating = False
Set doc = ActiveDocument
For Each para In doc.Paragraphs
If para.Style = doc.Styles(wdStyleHeading1) Then
para.Range.InsertBefore (MyText)
End If
Next para
End Sub
此代码有缺陷/损坏,但我无法找到解决方案。这适用于标题级别1-3。它在航向4-6层失败。文档很长,我的假设是4级标题和更高级别标题的数量会导致有缺陷的代码失败。这些标题级别的代码永远不会完成
这似乎是代码中不正确的部分:
For Each para In doc.Paragraphs
If para.Style = doc.Styles(wdStyleHeading1) Then
para.Range.InsertBefore (MyText)
我在宏上尝试了几十种变体,但在这一点上似乎都失败了。在调试中,调试器只是直接跳过“If/Then”行。调试时,它们从不以黄色突出显示
我的理解是,您不能在VBA中以编程方式选择段落。我的标题级别是从段落到单词。因此,我的行“para.Range.InsertBefore(Mytext)”可能对代码没有任何意义。我试图创建一个范围来使宏工作(范围具有“Selection”属性),但我做错了
如果您能给我一些关于修改代码的建议,我将不胜感激。使用以下脚本作为测试:
Public Sub InsertFOUOH1()
'Inserts U//FOUO before all first order Headings)
'Macro works on whole document
Dim doc As Document
Dim para As Paragraph
Const MyText = "(U//FOUO) "
Application.ScreenUpdating = False
Set doc = ActiveDocument
For Each para In doc.Paragraphs
If para.Style = doc.Styles(wdStyleHeading1) Then para.Range.InsertBefore ("Level 1")
If para.Style = doc.Styles(wdStyleHeading2) Then para.Range.InsertBefore ("Level 2")
If para.Style = doc.Styles(wdStyleHeading3) Then para.Range.InsertBefore ("Level 3")
If para.Style = doc.Styles(wdStyleHeading4) Then para.Range.InsertBefore ("Level 4")
If para.Style = doc.Styles(wdStyleHeading5) Then para.Range.InsertBefore ("Level 5")
If para.Style = doc.Styles(wdStyleHeading6) Then para.Range.InsertBefore ("Level 6")
If para.Style = doc.Styles(wdStyleHeading7) Then para.Range.InsertBefore ("Level 7")
If para.Style = doc.Styles(wdStyleHeading8) Then para.Range.InsertBefore ("Level 8")
If para.Style = doc.Styles(wdStyleHeading9) Then para.Range.InsertBefore ("Level 9")
Next para
End Sub
我第一次尝试时,它只对wdStyleHeading7
有效,我发现这是因为我的标题样式只升到了第7级,尽管我的文档中有1.1.1.1.1.1
(第8级)和第9级
然后,我通过选择文本并使用更新标题匹配所选内容,将第8级和第9级样式添加到我的样式中。一旦添加了第8个和第9个标题样式
,则在标题文本之前添加文本
编辑:
我现在用para.Range.InsertBefore(MyText)
对它进行了测试,它也工作得很好,因为它只是在office 2003 sp3上添加了文本测试。代码工作良好的所有标题(wdStyleHeading1..wdStyleHeading9)谢谢伊万。不幸的是,我不得不在我的工作环境中使用Word 2010或2013。Office 2003 sp.3不是一个选项。非常有趣的是,宏在2003年版本中工作。我感谢你的建议。