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

Respuestas a la pregunta(3)

Su respuesta a la pregunta