1

私は現在、非常に多くのテーブルで構成されるある種のドキュメントを扱っています。もうお察しのとおり、特定のスタイルでフォーマットする必要があります。そのため、その目的専用に作成された VBA マクロがあります。必要なスタイルを作成し、それをファイル内のすべてのテーブルに適用します。しかし、大きなドキュメントを扱っていると問題が発生するようです。それでは、スタイルが作成される部分を省略して、作業コードを見てみましょう。

Dim oTable As Table
For Each oTable In ActiveDocument.Tables
oTable.Select
Selection.Tables(1).ApplyStyleDirectFormatting ("FooStyle")
Selection.Tables(1).AutoFitBehavior (wdAutoFitFixed)
Selection.Tables(1).ApplyStyleRowBands = True
With Selection.Tables(1).Borders
    .InsideLineStyle = wdLineStyleSingle
    .InsideLineWidth = wdLineWidth025pt
    .OutsideLineStyle = wdLineStyleSingle
    .OutsideLineWidth = wdLineWidth025pt
End With

'Make a list for last row of the table
Selection.Tables(1).Cell(Row:=8, Column:=1).Range.Select
Selection.Range.ListFormat.ApplyListTemplate ListTemplate:=ListGalleries(wdOutlineNumberGallery).ListTemplates(2)
Next

したがって、このコードは 600 ページ未満のドキュメントでうまく機能します。それ以外の場合は行で停止します

.InsideLineStyle = wdLineStyleSingle

実行時エラー 4605 で、メモリとディスク容量に関するストーリーが伝えられます。いくつかの調査を行ったところ、Selection の欠点について説明しているこの素晴らしいスレッドを見つけました。次に、与えられたアドバイスに従い、マクロのコードを少し変更すると、次のようになります。

Dim lTbl As Long
For lTbl = 1 To ActiveDocument.Tables.Count
ActiveDocument.Tables(lTbl).ApplyStyleDirectFormatting ("BarStyle")
ActiveDocument.Tables(lTbl).AutoFitBehavior (wdAutoFitFixed)
ActiveDocument.Tables(lTbl).ApplyStyleRowBands = True
With ActiveDocument.Tables(lTbl).Borders
    .InsideLineStyle = wdLineStyleSingle
    .InsideLineWidth = wdLineWidth025pt
    .OutsideLineStyle = wdLineStyleSingle
    .OutsideLineWidth = wdLineWidth025pt
End With

'Make a list for last row of the table
ActiveDocument.Tables(lTbl).Cell(Row:=8, Column:=1).Range.ListFormat.ApplyListTemplate ListTemplate:=ListGalleries(wdOutlineNumberGallery).ListTemplates(2)
Next

ええ、不気味に長い列です。いいえ、何も変わりませんでした。これ以上の選択はないようですが、同じ場所で同じエラーが発生します。それで、エラーが表示されたときにデバッガーが停止した部分を変更してみました:

For Each oCell In ActiveDocument.Tables(lTbl).Range.Cells
    oCell.Borders.OutsideLineStyle = wdLineStyleSingle
    oCell.Borders.OutsideLineWidth = wdLineWidth025pt
    Next

役に立たない - それでも同じ問題が発生します。この時点で、私はいくつかの実験を行うことに決め、コードの最後の行 (その長い**行) の隣を削除しました...そして出来上がり - マクロは魔法のように機能し、エラーも苦情も何もありません。議論のために、このマクロの最初のバージョンに同じ変更を加えてみましたが、結果は同じでした-ずっとその行のせいだったようです. したがって、最後の行の番号付きリストは必須であるため、このままにしておくことは解決策ではありません。では、このエラーが表示されないようにするには、このマクロをどうすればよいでしょうか?

4

1 に答える 1

1

そのような問題は、タスクを 2 つのループに分割することで解決できます。最初の反復では、テーブルの書式設定が変更されます。2 回目の繰り返しではListFormat、予想される場所に追加されます。

もちろん、結果としてサブルーチンは遅くなりますが、最終的には必要なものが得られます。

于 2013-04-09T13:00:48.120 に答える