Word-VBA Tabstop falsches Verhalten
Frage
Ich habe den folgenden VBA-Code
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
Grundsätzlich ist dieser Code nur druckt n Zahlen von Linien mit dem spezifischen Format.
- Bullet list
- Indented
- und TabStops
(Quelle: lans-msp.de )
Der Code funktioniert perfekt für eine beliebige Anzahl von Zeilen, dann aber an einem gewissen Punkt Wort hält nur die TabStops Anwendung.
Ich weiß, dass, wenn ich nicht das Format alle 10 Zeilen zurückgesetzt würde, würde der Code scheinbar für immer arbeiten (wirklich?!?). Aber die jede Zeile 10 Bremse ist ein Muss.
Die genaue Zeilennummer, wo alles zusammenbricht ist auf die Menge an RAM abhängig. Auf meinem Computer mit 1 GB es funktioniert nur bis ca. Linie 800 (wie Sie sehen können). Mein Computer zu Hause mit 4 GB hat dieses Verhalten nicht zeigen. Aber ich bin sicher, es wäre es auch gezeigt, wenn ich es lange genug laufen gelassen hatte, weil in meinem Produktionscode (das ist ein wenig komplexer ist) mein Heimcomputer zeigt das Problem auch.
Ist das eine Art von Speicherverlust, oder was? Was habe ich falsch gemacht? Ist vielleicht, Gott verbieten, VBA selbst die Täter hier?
Lösung
Versuchen Sie, die Formatierung mit einem definierten Stil anzuwenden. Prüfen Sie, ob das einen Unterschied macht.
Andere Tipps
Sie könnten versuchen, die automatische Paginierung ausschalten, während die Linien hinzufügen, um zu sehen, ob das hilft.
Application.Options.Pagination = False