Pregunta

Tengo el siguiente 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

Básicamente este código sólo imprime un número n de líneas con el formato específico.

  • Lista de viñetas
  • Indented
  • y TabStops

alt text
(fuente: lans-msp.de )

El código funciona perfectamente para un número arbitrario de líneas, pero entonces en algún momento Palabra simplemente deja de aplicar las TabStops.

Yo sé que si yo no restablecer el formato de cada 10 líneas, el código funcionaría aparentemente para siempre (en realidad?!?). Pero el freno de línea cada 10 es una necesidad.

El número de línea exacta donde todo se rompe depende de la cantidad de memoria RAM. En mi equipo de trabajo con 1 GB sólo funciona hasta cerca de la línea 800 (como se puede ver). Mi equipo en casa con 4 GB no mostraron este comportamiento. Pero estoy seguro de que habría demostrado que es así si tuviera que dejar correr el tiempo suficiente, porque en mi código de producción (que es un poco más compleja) mi ordenador muestra el problema también.

Es esto algún tipo de pérdida de memoria o algo? ¿Qué hice mal? Es tal vez, dios no lo quiera, VBA en sí el culpable aquí?

¿Fue útil?

Solución

Trate de aplicar el formato usando un estilo definido. A ver si eso hace la diferencia.

Otros consejos

Usted puede tratar de convertir paginación automática apagado mientras que la adición de las líneas, para ver si eso ayuda.

Application.Options.Pagination = False
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top