Question

Je le code VBA suivant

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

En gros ce code qu'afficher n nombres de lignes avec le format spécifique.

  • Liste Bullet
  • indenté
  • et TabStops


(source: lans-msp.de )

Le code fonctionne parfaitement pour un nombre arbitraire de lignes, mais à un moment donné Word cesse simplement d'appliquer les TabStops.

Je sais que si je ne serais pas réinitialiser le format toutes les 10 lignes, le code travaillerait apparemment pour toujours (vraiment?!?). Mais le frein de chaque ligne 10 est un must.

Le numéro de la ligne exacte où tout tombe en panne dépend de la quantité de mémoire vive. Sur mon ordinateur de travail avec 1 Go il ne fonctionne que jusqu'à environ la ligne 800 (comme vous pouvez le voir). Mon ordinateur à la maison avec 4 Go ne montre pas ce comportement. Mais je suis sûr qu'il aurait montré aussi bien si je l'avais assez longtemps laissez parler, parce que dans mon code de production (ce qui est un peu plus complexe) mon ordinateur à la maison montre le problème ainsi.

Est-ce une sorte de fuite de mémoire ou quelque chose? Qu'ai-je fait de mal? Est-ce peut-être, Dieu ne plaise, VBA lui-même le coupable ici?

Était-ce utile?

La solution

Essayez d'appliquer la mise en forme en utilisant un style défini. Voir si cela fait une différence.

Autres conseils

Vous pouvez essayer de tourner en page automatique de tout en ajoutant les lignes, pour voir si cela aide.

Application.Options.Pagination = False
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top