Вопрос

У меня есть следующий код 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 просто перестает применять TabStops.

Я знаю, что если бы я не сбрасывал формат каждые 10 строк, код работал бы, казалось бы, вечно (правда?!?).Но тормоз каждые 10 строп обязателен.

Точный номер строки, где все ломается, зависит от объема оперативной памяти.На моем рабочем компьютере с 1 ГБ он работает только до строки 800 (как видите).Мой домашний компьютер с 4 ГБ такого поведения не показывал.Но я уверен, что он бы тоже это показал, если бы он работал достаточно долго, потому что в моем рабочем коде (который немного сложнее) мой домашний компьютер также показывает проблему.

Это какая-то утечка памяти или что-то в этом роде?Что я сделал не так?Может быть, не дай бог, виноват здесь сам VBA?

Это было полезно?

Решение

Попробуйте применить форматирование, используя определенный стиль.Посмотрите, имеет ли это значение.

Другие советы

Вы можете попробовать отключить автоматическое разбиение на страницы при добавлении строк, чтобы посмотреть, поможет ли это.

Application.Options.Pagination = False
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top