mal comportamiento palabra VBA Tabstop
Pregunta
Tengo el siguiente código VBA
Private Sub CreateQuery_Click()
Dim doc As Document
Dim i As Integer
Set doc = ActiveDocument
i = doc.Paragraphs.Count
doc.Paragraphs(i).Range.InsertParagraphAfter
i = i + 1
For j = 0 To 1000
doc.Paragraphs(i).Range.InsertParagraphAfter
i = i + 1
doc.Paragraphs(i).Range.InsertParagraphAfter
i = i + 1
With doc.Paragraphs(i)
.Range.Font.Italic = True
.Range.ListFormat.ApplyBulletDefault
.Indent
.Indent
.TabStops.Add Position:=CentimetersToPoints(3.14)
.TabStops.Add Position:=CentimetersToPoints(10)
.TabStops.Add Position:=CentimetersToPoints(11)
End With
For k = 0 To 10
With doc.Paragraphs(i)
.Range.InsertAfter "testState" & vbTab & CStr(doc.Paragraphs(i).Range.ListFormat.CountNumberedItems) & vbTab & CStr(doc.Paragraphs.Count)
.Range.InsertParagraphAfter
End With
i = i + 1
Next
i = doc.Paragraphs.Count
With doc.Paragraphs(i)
.Range.ListFormat.ApplyBulletDefault
.TabStops.ClearAll
.Outdent
.Outdent
End With
Next
i = doc.Paragraphs.Count
doc.Paragraphs(i).Range.InsertParagraphAfter
i = i + 1
End Sub
Básicamente este código sólo imprime un número n de líneas con el formato específico.
- Lista de viñetas
- Indented
- y TabStops
(fuente: lans-msp.de )
El código funciona perfectamente para un número arbitrario de líneas, pero entonces en algún momento Palabra simplemente deja de aplicar las TabStops.
Yo sé que si yo no restablecer el formato de cada 10 líneas, el código funcionaría aparentemente para siempre (en realidad?!?). Pero el freno de línea cada 10 es una necesidad.
El número de línea exacta donde todo se rompe depende de la cantidad de memoria RAM. En mi equipo de trabajo con 1 GB sólo funciona hasta cerca de la línea 800 (como se puede ver). Mi equipo en casa con 4 GB no mostraron este comportamiento. Pero estoy seguro de que habría demostrado que es así si tuviera que dejar correr el tiempo suficiente, porque en mi código de producción (que es un poco más compleja) mi ordenador muestra el problema también.
Es esto algún tipo de pérdida de memoria o algo? ¿Qué hice mal? Es tal vez, dios no lo quiera, VBA en sí el culpable aquí?
Solución
Trate de aplicar el formato usando un estilo definido. A ver si eso hace la diferencia.
Otros consejos
Usted puede tratar de convertir paginación automática apagado mientras que la adición de las líneas, para ver si eso ayuda.
Application.Options.Pagination = False