VBA Word Tabstop comportement erroné
Question
Je le code VBA suivant
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
En gros ce code qu'afficher n nombres de lignes avec le format spécifique.
- Liste Bullet
- indenté
- et TabStops
(source: lans-msp.de )
Le code fonctionne parfaitement pour un nombre arbitraire de lignes, mais à un moment donné Word cesse simplement d'appliquer les TabStops.
Je sais que si je ne serais pas réinitialiser le format toutes les 10 lignes, le code travaillerait apparemment pour toujours (vraiment?!?). Mais le frein de chaque ligne 10 est un must.
Le numéro de la ligne exacte où tout tombe en panne dépend de la quantité de mémoire vive. Sur mon ordinateur de travail avec 1 Go il ne fonctionne que jusqu'à environ la ligne 800 (comme vous pouvez le voir). Mon ordinateur à la maison avec 4 Go ne montre pas ce comportement. Mais je suis sûr qu'il aurait montré aussi bien si je l'avais assez longtemps laissez parler, parce que dans mon code de production (ce qui est un peu plus complexe) mon ordinateur à la maison montre le problème ainsi.
Est-ce une sorte de fuite de mémoire ou quelque chose? Qu'ai-je fait de mal? Est-ce peut-être, Dieu ne plaise, VBA lui-même le coupable ici?
La solution
Essayez d'appliquer la mise en forme en utilisant un style défini. Voir si cela fait une différence.
Autres conseils
Vous pouvez essayer de tourner en page automatique de tout en ajoutant les lignes, pour voir si cela aide.
Application.Options.Pagination = False