【发布时间】:2015-05-06 17:13:40
【问题描述】:
我创建了一个插入标准公司分类的宏,该分类指示文档中的信息未分类但“仅供官方使用”。这表示为 (U//FOUO),出现在每个正文段落之前。我还创建了一个宏,它在使用本书的每一级编号标题之前插入相同的文本表达式。我的书是一个大的(约 665 页)Microsoft Word 文件。它也非常“密集”,有许多段落、表格和插图。尽管我的宏运行成功,但它们非常慢,大约需要 6 到 10 分钟才能完成。宏完成后,会显示运行时错误“28”(堆栈空间不足)。我不知道时间的长短是我编码效率低下的结果还是书的密度/复杂性/长度的反映。
您能否建议更改以下代码以使其更高效地运行?或者也许只是表明“延迟”是否可能只是文档长度的自然和预期结果?我的代码如下:
Public Sub InsertFOUObody()
'Inserts U//FOUO before all body paragraphs
Dim doc As Document
Dim para As Paragraph
Dim paraNext As Paragraph
Dim MyText As String
Set doc = ActiveDocument
Set para = doc.Paragraphs.First
Do While Not para Is Nothing
Set paraNext = para.Next
MyText = "(U//FOUO) "
If para.Style = doc.Styles(wdStyleBodyText) Then
para.Range.InsertBefore (MyText)
End If
Set para = paraNext
Loop
End Sub
当我尝试调试代码时,我觉得有问题的行是Set paraNext = para.next。但是,作为 VBA 的新手,我无法理解为什么这行代码有问题。该代码似乎产生了比必要更多的调用。
【问题讨论】:
-
从外观上看,您可能需要在此子例程运行时禁用屏幕更新。