我有以下 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 本身就是这里的罪魁祸首?