次の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 は TabStops の適用を停止します。
10 行ごとにフォーマットをリセットしなければ、コードは永遠に機能するように見えることはわかっています (本当に?!?)。ただし、10 ラインごとのブレーキは必須です。
すべてが壊れる正確な行番号は、RAM の量に依存します。1GBの私の仕事用コンピューターでは、800行目までしか機能しません(ご覧のとおり)。自宅の 4GB のコンピューターでは、この動作は見られませんでした。しかし、私の製品コード (もう少し複雑です) では、自宅のコンピューターでも問題が発生するため、十分な時間実行させていれば、同様に表示されたと確信しています。
これはある種のメモリリークか何かですか?私は何を間違えましたか?おそらく、VBA 自体がここで犯人なのでしょうか?