我遇到了一个相当简单的 Microsoft Word vba 宏问题,该宏旨在解决当我们从 Word 文档创建 PDF 版本时我们在列表缩进中遇到的一些问题。
该宏基本上循环遍历文档中的每个列表,并且对于与列表关联的每个列表段落,它设置列表模板的项目符号和文本位置以匹配在段落级别应用的内容(代码需要与 Word 2000 一起使用,因此不能使用列表样式)。
处理大型文档(60+列表,~350列表段落)时,宏第一次运行良好,但第二次中途终止,并显示“此方法或属性不可用,因为存在内存或磁盘问题” 。
我已经按照通常的路线取消了循环期间使用的任何对象引用,因此我看不到可能占用内存的内容。
代码非常简单,由一个过程组成,当前存储在 ThisDocument 中:
Option Explicit
Sub test2()
Dim i As Integer, n As Integer
Dim curList As List, curPar As Paragraph, templ As ListTemplate
Dim gapSize As Double, level As Integer
Application.ScreenUpdating = False
Application.Options.Pagination = False
For i = 1 To Lists.Count
Set curList = Lists(i)
For n = 1 To curList.ListParagraphs.Count
Set curPar = curList.ListParagraphs(n)
Set templ = curPar.Range.ListFormat.ListTemplate
level = curPar.Range.ListFormat.ListLevelNumber
gapSize = templ.ListLevels(level).TextPosition - templ.ListLevels(level).NumberPosition
templ.ListLevels(level).NumberPosition = curPar.LeftIndent - gapSize
templ.ListLevels(level).TextPosition = curPar.LeftIndent
templ.ListLevels(level).TabPosition = curPar.TabStops.After(curPar.LeftIndent - gapSize).position
Set templ = Nothing
Set curPar = Nothing
Next n
UndoClear
Set curList = Nothing
Next i
Application.ScreenUpdating = True
Application.Options.Pagination = True
End Sub
我找到了一个令人讨厌、肮脏的解决方案,可以在一定程度上解决这个问题,但实际上是一个非常糟糕的解决方案。基本上,一旦我们完成了宏的一次完整运行,关闭并保存文档并立即重新打开。然后,这允许立即或在任何阶段重新运行宏,因为关闭文档似乎最终会正确刷新内存。显然,只有当用户乐意保存作为运行宏的一部分时才能使用此功能,但就我而言,它是
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)