Pergunta

Eu tenho o seguinte código 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

Basicamente, este código apenas impressões n número de linhas com o formato específico.

  • lista Bala
  • Indented
  • e TabStops

text alt
(fonte: lans-msp.de )

O Código funciona perfeitamente para um número arbitrário de linhas, mas, em seguida, em algum momento Palavra simplesmente pára de aplicação das TabStops.

Eu sei que se eu não iria redefinir o formato a cada 10 linhas, o código funcionaria aparentemente para sempre (realmente?!?). Mas o freio de linha a cada 10 é uma obrigação.

O número da linha exata onde tudo se decompõe depende da quantidade de RAM. No meu computador de trabalho com 1GB ele só funciona até cerca de linha 800 (como você pode ver). Meu computador em casa com 4GB não apresentaram esse comportamento. Mas eu tenho certeza que ele teria mostrado, bem como se eu tivesse que deixar correr o tempo suficiente, porque no meu código de produção (que é um pouco mais complexa) meu computador de casa mostra o problema também.

Trata-se de algum tipo de vazamento de memória ou algo assim? O que eu fiz errado? É, talvez, o deus-me livre,-se o culpado aqui VBA?

Foi útil?

Solução

Tente aplicar a formatação usando um estilo definido. Ver se isso faz a diferença.

Outras dicas

Você pode tentar transformar paginação automática off ao adicionar as linhas, para ver se isso ajuda.

Application.Options.Pagination = False
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top