У меня есть следующий код VBAСлово VBA Tabstop неправильное поведение
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
В основном этот код просто печатает п число строк с конкретным форматом.
- Маркированный список
- отступом
- и табуляции
alt text http://files.lans-msp.de/vbscript_tabstops.png
Кодекс отлично работает для произвольного числа строк, но в какой-то момент слово просто останавливается применения табуляции ,
Я знаю, что если бы я не сбросил формат каждые 10 строк, код работал бы навсегда (действительно?!?). Но каждый 10-ти линейный тормоз является обязательным.
Точный номер строки, где все ломается, зависит от объема ОЗУ. На моем рабочем компьютере с 1 ГБ он работает только до строки 800 (как вы можете видеть). Мой компьютер дома с 4 ГБ не показал этого поведения. Но я уверен, что это тоже показало бы, если бы у меня это получилось достаточно долго, потому что в моем производственном коде (который немного сложнее) мой домашний компьютер также показывает проблему.
Это какая-то утечка памяти или что-то в этом роде? Что я сделал не так? Может быть, бог-запрет, сам VBA здесь виновник?
Мне также интересно, почему на земле кто-то хотел бы форматировать * каждую строку * напрямую, когда их формат вообще не отличается. – Tomalak
Это не каждая строка. Я просто повторно применяю формат каждого блока из 10 строк. В реальном сценарии все больше вещей происходит между блоками. – eric
Это решило проблему для меня. Я вижу, что это более чистый способ, так что здорово. Но я все еще думаю, что у Слова есть какая-то утечка памяти. Возможно, это «исправление» просто немного подтолкнуло границы ... Большое спасибо, в любом случае, моя проблема ушла, и это самое главное! – eric