2009-07-22 7 views
0

ich den folgenden VBA-Code habenWort VBA Tabstop falsches Verhalten

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 n Zahlen von Linien mit dem spezifischen Format druckt.

  • Bullet list
  • Indented
  • und TabStops

alt text http://files.lans-msp.de/vbscript_tabstops.png

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ß, wenn ich das Format nicht alle 10 Zeilen zurücksetzen würde, würde der Code scheinbar für immer funktionieren (wirklich?!?). Aber die alle 10 Linienbremse ist ein Muss.

Die genaue Zeilennummer, bei der alles zusammenbricht, hängt von der Größe des Arbeitsspeichers ab. Auf meinem Arbeitscomputer mit 1GB funktioniert es nur bis etwa Zeile 800 (wie Sie sehen können). Mein Computer zu Hause mit 4 GB zeigte dieses Verhalten nicht. Aber ich bin mir sicher, es hätte es auch gezeigt, wenn ich es lange genug laufen lassen hätte, denn in meinem Produktionscode (der etwas komplexer ist) zeigt mein Heimcomputer auch das Problem.

Ist das eine Art Speicherleck oder etwas? Was habe ich falsch gemacht? Ist vielleicht, Gott behüte, VBA selbst der Schuldige hier?

Antwort

3

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

+0

Ich frage mich auch, warum auf der Erde jeder * jede einzelne Zeile * formatieren möchte, wenn sich ihr Format überhaupt nicht unterscheidet. – Tomalak

+0

Es ist nicht jede Zeile. Ich beziehe das Format einfach jeden Block von 10 Zeilen neu. Im echten Drehbuch geht es zwischen den Blöcken weiter. – eric

+0

Das hat das Problem für mich gelöst. Ich kann sehen, dass dies der sauberere Weg ist, das ist großartig. Aber ich denke immer noch, dass Word hier eine Art Speicherleck hat. Vielleicht hat diese "Lösung" die Grenzen ein wenig verschoben ... Vielen Dank trotzdem, mein Problem ist weg und das ist das Wichtigste! – eric

0

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

Application.Options.Pagination = False 
+0

Nein, leider funktioniert das nicht, aber ich bekomme einen extra korrekt formatierten Block. Danach bricht es immer noch – eric

Verwandte Themen