Palavra VBA Tabstop comportamento errado
Pergunta
Eu tenho o seguinte 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
Basicamente, este código apenas impressões n número de linhas com o formato específico.
- lista Bala
- Indented
- e TabStops
(fonte: lans-msp.de )
O Código funciona perfeitamente para um número arbitrário de linhas, mas, em seguida, em algum momento Palavra simplesmente pára de aplicação das TabStops.
Eu sei que se eu não iria redefinir o formato a cada 10 linhas, o código funcionaria aparentemente para sempre (realmente?!?). Mas o freio de linha a cada 10 é uma obrigação.
O número da linha exata onde tudo se decompõe depende da quantidade de RAM. No meu computador de trabalho com 1GB ele só funciona até cerca de linha 800 (como você pode ver). Meu computador em casa com 4GB não apresentaram esse comportamento. Mas eu tenho certeza que ele teria mostrado, bem como se eu tivesse que deixar correr o tempo suficiente, porque no meu código de produção (que é um pouco mais complexa) meu computador de casa mostra o problema também.
Trata-se de algum tipo de vazamento de memória ou algo assim? O que eu fiz errado? É, talvez, o deus-me livre,-se o culpado aqui VBA?
Solução
Tente aplicar a formatação usando um estilo definido. Ver se isso faz a diferença.
Outras dicas
Você pode tentar transformar paginação automática off ao adicionar as linhas, para ver se isso ajuda.
Application.Options.Pagination = False