Colocar una macro de Word en muchos párrafos de la lista causa problemas de memoria
Estoy teniendo problemas con una macro vba razonablemente sencilla para Microsoft Word que está diseñada para solucionar algunos problemas que estamos viendo con la sangría de la lista cuando creamos versiones de PDF desde el documento de Word.
La macro básicamente recorre cada lista en el documento, y para cada párrafo de la lista asociado con la lista, está configurando la viñeta de la plantilla de la lista y la posición del texto para que coincida con lo que se aplica a nivel de párrafo (el código debe usarse con Word 2000, por lo que no utiliza estilos de lista).
Cuando se trata de documentos de gran tamaño (más de 60 listas, ~ 350 párrafos de lista), la macro funciona bien la primera vez, pero la segunda vez muere a la mitad con un "Este método o propiedad no está disponible porque hay un problema de memoria o disco ".
He seguido la ruta habitual de desarmar cualquier referencia de objeto utilizada durante el ciclo, por lo que no puedo ver lo que podría estar reteniendo en la memoria.
El código es bastante simple y consiste en un solo procedimiento, actualmente almacenado en 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