私は、次のVBAコードWordの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 http://files.lans-msp.de/vbscript_tabstops.png
コード行の任意の数のために完璧に動作しますが、その後、いくつかの点で言葉だけでタブストップをかけ停止します。
私は10行ごとにフォーマットをリセットしないと、コードは一見永遠に(実際には!?)動作することがわかっています。しかし、すべての10ラインブレーキは必須です。
すべてが破壊される正確な行番号は、RAMの量によって異なります。 1GBの私の仕事のコンピュータでは、それはあなたが見ることができるように約800行までしか動作しません。 4GBの家庭の私のコンピュータはこの動作を示さなかった。しかし、私の生産コード(もう少し複雑です)では私の家庭用コンピュータも問題を示しているので、私はそれが十分長く実行されるならば、それを表示したと確信しています。
メモリリークなどありますか?私は何を間違えたのですか?多分、神は禁じられています、VBA自体はここでの犯人ですか?
私は、なぜ地球上の誰もが、そのフォーマットが全く違っていないときには、すべての単一のラインを直接フォーマットしたいと思っているのだろうかと思っています。 – Tomalak
すべての行ではありません。私はちょうど10行のブロックごとにフォーマットを再適用します。実際のスクリプトのやり方では、ブロック間でより多くのことが起こっています。 – eric
これは私の問題を解決しました。私はこれがよりクリーンな方法であることがわかります。しかし、私はまだWordがある種のメモリリークを持っていると思います。たぶん、この「修正」はちょっと境界を押してしまったかもしれません... どうもありがとうございました。私の問題はなくなりました。 – eric