我有以下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 行。

  • 项目符号列表
  • 缩进
  • 和制表位

alt text
(来源: 兰斯-msp.de)

该代码适用于任意行数,但在某些时候 Word 会停止应用 TabStop。

我知道,如果我不每 10 行重置一次格式,代码看起来就会永远有效(真的吗?!?)。但每10行刹车是必须的。

发生故障的确切行号取决于 RAM 的大小。在我的 1GB 工作计算机上,它只能工作到大约第 800 行(如您所见)。我家里的 4GB 电脑没有出现这种情况。但我确信,如果我让它运行足够长的时间,它也会显示出来,因为在我的生产代码(有点复杂)中,我的家用计算机也显示了这个问题。

这是某种内存泄漏还是什么?我做错了什么?也许,上帝保佑,VBA 本身就是罪魁祸首吗?

有帮助吗?

解决方案

尝试使用定义的样式应用格式。看看这是否有影响。

其他提示

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

Application.Options.Pagination = False
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top