0

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

4

2 回答 2

3

尝试使用定义的样式应用格式。看看这是否有所作为。

于 2009-07-22T09:06:05.617 回答
0

您可以尝试在添加行时关闭自动分页,看看是否有帮助。

Application.Options.Pagination = False
于 2009-07-22T09:03:16.013 回答