Frage

Ich habe den folgenden VBA-Code

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

Grundsätzlich ist dieser Code nur druckt n Zahlen von Linien mit dem spezifischen Format.

  • Bullet list
  • Indented
  • und TabStops


(Quelle: lans-msp.de )

Der Code funktioniert perfekt für eine beliebige Anzahl von Zeilen, dann aber an einem gewissen Punkt Wort hält nur die TabStops Anwendung.

Ich weiß, dass, wenn ich nicht das Format alle 10 Zeilen zurückgesetzt würde, würde der Code scheinbar für immer arbeiten (wirklich?!?). Aber die jede Zeile 10 Bremse ist ein Muss.

Die genaue Zeilennummer, wo alles zusammenbricht ist auf die Menge an RAM abhängig. Auf meinem Computer mit 1 GB es funktioniert nur bis ca. Linie 800 (wie Sie sehen können). Mein Computer zu Hause mit 4 GB hat dieses Verhalten nicht zeigen. Aber ich bin sicher, es wäre es auch gezeigt, wenn ich es lange genug laufen gelassen hatte, weil in meinem Produktionscode (das ist ein wenig komplexer ist) mein Heimcomputer zeigt das Problem auch.

Ist das eine Art von Speicherverlust, oder was? Was habe ich falsch gemacht? Ist vielleicht, Gott verbieten, VBA selbst die Täter hier?

War es hilfreich?

Lösung

Versuchen Sie, die Formatierung mit einem definierten Stil anzuwenden. Prüfen Sie, ob das einen Unterschied macht.

Andere Tipps

Sie könnten versuchen, die automatische Paginierung ausschalten, während die Linien hinzufügen, um zu sehen, ob das hilft.

Application.Options.Pagination = False
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top