このマクロは、ドキュメント内のすべての表にテーブルデザインを適用します。次に、表に段落書式を適用します。表の数が少ない場合 (たとえば 20 個)、実行速度が非常に遅くなります。
どうすれば最適化できるでしょうか?
Sub Apply_tabledesign_to_all_tables()
'
' Apply_tabledesign_to_all_tables Macro
' Apply EVU table to all tables in document.
'
Application.ScreenUpdating = False
Dim tbl As Table
Dim ac_cell As Word.cell
For Each tbl In ActiveDocument.Tables
tbl.Style = "EVU"
For Each ac_cell In tbl.Range.Cells
ac_cell.Range.ParagraphFormat.Style = ActiveDocument.Styles("tabel")
Next
'Set the alignment for the first column
For k = 1 To tbl.Columns(1).Cells.Count
tbl.cell(k, 1).Range.ParagraphFormat.Alignment = wdAlignParagraphLeft
Next k
Next
Application.ScreenUpdating = True
End Sub
編集: 最初の列の配置を含めるのを忘れました。
答え1
テーブルをループし、各テーブルの各セルをループします。これには時間がかかります。セルをループするのではなく、範囲を単一のオブジェクトとして処理します。
このようなものが機能するはずです(オブジェクトが正しいと仮定)
Sub Macro2()
Dim tbl As Table
For Each tbl In ActiveDocument.Tables
tbl.Style = "EVU"
tbl.Range.ParagraphFormat.Style = ActiveDocument.Styles("tabel")
Next
End Sub
基本的にはこれです(確かに機能します)
Sub Macro2()
Dim tbl As Table
For Each tbl In ActiveDocument.Tables
tbl.Style = "Light Shading"
tbl.Range.ParagraphFormat.Style = "Heading 1"
Next
End Sub
答え2
私が実装しなければならなかったもう 1 つのトリックは、ページ ビューから連続ビューに切り替えて、ページ番号の再設定をブロックすることです。この場合のポイントは、画面の更新を停止しても、タブでの変更ごとに Word がドキュメント全体のページ番号を再設定することです。
再ページ付けを効果的にブロックするための私の方法は、現在のページ ビュー モードを var に保存し、画面更新がブロックされた直後に連続ビューを強制することです。
Dim ViewModeSave As Variant
Application.ScreenUpdating = False
ViewModeSave = Application.ActiveWindow.View.Type
Application.ActiveWindow.View.Type = Word.wdNormalView
作業の最後に、元の設定に戻す必要があります。
Application.Options.Pagination = True
Application.ScreenUpdating = True
Application.ActiveWindow.View.Type = ViewModeSave
答え3
私も同じ問題を抱えていました。テーブル内のセルをループし、各セルの段落書式を設定していました。上記の回答には同意しますが、ボトルネックとなっているのはセルのループではなく、段落書式設定が遅いのです。信じられないほど遅いのです。ループに設定する段落書式プロパティの数を変えて実験してみました。プロパティを 1 つ設定するのは速かったのですが、設定するプロパティの数を 8 つに増やすと、VBA コードはどんどん遅くなり、8 では非常に遅くなりました。これは Word 2013 の問題だと思います。