使用VBA在MS Word多级列表标题中插入文本

使用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

大约6个月前,我请求论坛提供帮助,但我的问题只得到了部分解决。我希望有人能帮助我认识到在我创建的代码中我的错误发生在哪里

我的问题是,我想使用VBA在多级列表标题中的英语字符串之前插入非常简短的标准文本。这些标题作为样式存在于我的~600页文档中

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年版本中工作。我感谢你的建议。