【发布时间】:2015-10-30 19:39:57
【问题描述】:
大约 6 个月前,我向论坛请求了帮助,但我的问题仍然只得到了部分解决。我希望有人可以帮助我识别我创建的代码中的错误发生在哪里。
我的问题是我想使用 VBA 在我的多级列表标题中的英语字符串之前插入非常简短的标准化文本。这些标题作为样式存在于我的约 600 页文档中。
例如,我有: 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 中选择段落。我的标题级别是 Word 的段落。因此,我的“para.Range.InsertBefore (Mytext)”行可能对代码没有任何意义。我尝试创建一个范围以使宏工作(范围具有“选择”属性),但我做错了。
我当然会很感激有关更正我的代码的任何建议。
【问题讨论】:
-
在 office 2003 sp3 上测试。所有标题的代码工作正常(wdStyleHeading1..wdStyleHeading9)
-
谢谢伊万。不幸的是,我必须在工作环境中使用 Word 2010 或 2013。 Office 2003 sp.3 不是一个选项。非常有趣的是宏在 2003 版本中有效。感谢您的建议。