Domanda

Ho il seguente codice 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

In pratica questo codice stampa semplicemente n numero di linee con il formato specifico.

  • Elenco puntato
  • rientrato
  • e TabStops

alt text
(fonte: lans-msp.de )

Il codice funziona perfettamente per un numero arbitrario di linee, ma poi ad un certo punto si ferma solo Word applicando le TabStops.

So che se non vorrei ripristinare il formato di ogni 10 righe, il codice avrebbe funzionato apparentemente per sempre (davvero?!?). Ma il freno linea ogni 10 è un must.

Il numero esatto linea dove tutto si rompe dipende dalla quantità di RAM. Sul mio computer di lavoro con 1GB funziona solo fino a circa la linea 800 (come potete vedere). Il mio computer a casa con 4 GB non ha mostrato questo comportamento. Ma sono sicuro che sarebbe dimostrato pure se ho avuto lasciare scorrere abbastanza a lungo, perché nel mio codice di produzione (che è un po 'più complesso) il mio computer di casa mostra il problema pure.

E 'una specie di perdita di memoria o qualcosa del genere? Che cosa ho fatto di sbagliato? È forse, dio non voglia, VBA stesso il colpevole qui?

È stato utile?

Soluzione

Provare per applicare la formattazione utilizzando uno stile definito. Vedere se questo fa la differenza.

Altri suggerimenti

Si potrebbe provare a girare impaginazione automatica off, mentre l'aggiunta delle linee, per vedere se questo aiuta.

Application.Options.Pagination = False
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top