質問

次の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
(ソース: lans-msp.de)

コードは任意の行数では完璧に機能しますが、ある時点で Word が TabStop の適用を停止します。

10 行ごとにフォーマットをリセットしなければ、コードは一見永遠に動作することはわかっています (本当に?!?)。ただし、10ラインごとのブレーキは必須です。

すべてが壊れる正確な行番号は、RAM の量によって異なります。1GBの私の職場のコンピューターでは、(ご覧のとおり)約800行目までしか動作しません。4GB を搭載した自宅のコンピューターでは、この動作は見られませんでした。しかし、私の実稼働コード (もう少し複雑です) では、自宅のコンピューターでも同様に問題が発生するため、十分に長く実行させておけば、同様に問題が発生したと確信しています。

これは何らかのメモリリークか何かでしょうか?私が何を間違えたのでしょうか?もしかしたら、まさかのことですが、VBA そのものが原因なのでしょうか?

役に立ちましたか?

解決

定義されたスタイルを使用して書式を適用するようにしてください。それが違いを作るかどうかを確認します。

他のヒント

あなたはそれができますかどうかを確認するために、行を追加しながら、オフの自動改ページを回してみてください。

Application.Options.Pagination = False
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top