Word VBA タブストップの誤った動作
質問
次の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
基本的に、このコードは特定の形式で n 行を出力するだけです。
- 箇条書きリスト
- インデント
- とタブストップ
(ソース: lans-msp.de)
コードは任意の行数では完璧に機能しますが、ある時点で Word が TabStop の適用を停止します。
10 行ごとにフォーマットをリセットしなければ、コードは一見永遠に動作することはわかっています (本当に?!?)。ただし、10ラインごとのブレーキは必須です。
すべてが壊れる正確な行番号は、RAM の量によって異なります。1GBの私の職場のコンピューターでは、(ご覧のとおり)約800行目までしか動作しません。4GB を搭載した自宅のコンピューターでは、この動作は見られませんでした。しかし、私の実稼働コード (もう少し複雑です) では、自宅のコンピューターでも同様に問題が発生するため、十分に長く実行させておけば、同様に問題が発生したと確信しています。
これは何らかのメモリリークか何かでしょうか?私が何を間違えたのでしょうか?もしかしたら、まさかのことですが、VBA そのものが原因なのでしょうか?
解決
定義されたスタイルを使用して書式を適用するようにしてください。それが違いを作るかどうかを確認します。
他のヒント
あなたはそれができますかどうかを確認するために、行を追加しながら、オフの自動改ページを回してみてください。
Application.Options.Pagination = False
所属していません StackOverflow