Word VBA Tabstop 错误行为
题
我有以下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 行。
- 项目符号列表
- 缩进
- 和制表位
(来源: 兰斯-msp.de)
该代码适用于任意行数,但在某些时候 Word 会停止应用 TabStop。
我知道,如果我不每 10 行重置一次格式,代码看起来就会永远有效(真的吗?!?)。但每10行刹车是必须的。
发生故障的确切行号取决于 RAM 的大小。在我的 1GB 工作计算机上,它只能工作到大约第 800 行(如您所见)。我家里的 4GB 电脑没有出现这种情况。但我确信,如果我让它运行足够长的时间,它也会显示出来,因为在我的生产代码(有点复杂)中,我的家用计算机也显示了这个问题。
这是某种内存泄漏还是什么?我做错了什么?也许,上帝保佑,VBA 本身就是罪魁祸首吗?
解决方案
尝试使用定义的样式应用格式。看看这是否有影响。
其他提示
您可以尝试在添加行时关闭自动分页,看看是否有帮助。
Application.Options.Pagination = False
不隶属于 StackOverflow