【Word VBA】文書中のすべての表を選択するWordマクロ

現在のWordマクロの仕事で、特定箇所の編集ができないように文書を保護する必要がありました。その中で、文書保護に関するマクロを調べていたときに思いついたマクロです。

今までは、私は「Wordマクロでは、複数の箇所を同時選択できない。Selectionオブジェクトは常に1つだから。もし複数箇所を選択するのであれば[検索と置換]ダイアログボックスを使うしかない!」と思っていました。

【Word】[検索と置換]ダイアログボックスにて複数箇所の文字列を選択する

でも、Wordマクロでも複数箇所を同時に選択する方法がありました!

サンプルコードとして文書中の表を同時に選択するマクロを紹介します。応用すれば、図や特定の文字列を複数箇所を同時に選択できます。

このマクロでできること

文書中のすべての表を同時に選択します。

(マクロ実行前)

(マクロ実行後)

注:マクロ実行前に、文書が保護されていない状態にしてください。
また、[例外処理(オプション)] で編集可能な領域として設定された範囲が
 [ ] で表示されますので、[ ] も解除してください。 
こちらの記事の最後に保護の解除方法がわかりやすく解説されています。
決められた場所以外は編集できないようにするには(外部リンク:クリエのちょこテク)

マクロの解説

For Each … Next ステートメントを用いて、文書中のすべての表に対して処理をします。おきまりのパターンです。

このときの処理として、表1つ1つを「編集可能な領域」として設定するのです。(14行目)

Wordマクロには、「編集可能な領域」を同時に選択するというメソッド(20行目のSelectAllEditableRanges)があるので、これを使うための前処理なのです。

そして、表をすべて選択したら、「編集可能な領域」として設定された範囲を解除します。(24行目~27行目)

このような処理をしているのでEditorオブジェクトを用いてややこしいコードになっています。

Editorオブジェクトは使いづらい(文書中に何カ所Editorオブジェクトがあるのか数えられないみたい。。。)ので、おすすめの使い方ではありませんが、こんなこともできるというサンプルです。

マクロ


Sub 文書中のすべての表を選択する()
 
 Dim myDoc As Document
 Dim myTable As Table
 Dim myEditor As Editor
 
 'オブジェクト変数の設定
 Set myDoc = ActiveDocument
 
 '表を編集可能な領域に設定する
 For Each myTable In myDoc.Tables
  myTable.Range.Editors.Add wdEditorEveryone
 Next
 
 '編集可能な領域をすべて選択する
 With myDoc
  .Protect wdAllowOnlyReading
  .SelectAllEditableRanges
 End With
 
 '編集可能な領域と設定された箇所の解除
 Set myEditor = myDoc.Tables(1).Range.Editors(1)
 
 myEditor.DeleteAll
 myDoc.Unprotect
 
 'オブジェクト変数の解放
 Set myEditor = Nothing
 Set myDoc = Nothing
 
End Sub

コメント

  1. K より:

    ブログ記事をワードに転載して一覧を作る必要があり、
    毎回その作業の際に各記事が記載されたカラム(表)のサイズをそろえるのに
    一つひとつそろえることとなり、苦戦していたのですが、
    こちらのマクロのおかげで一括でできるようになりました。
    ありがとうございました!

    • 新田順也 より:

      Kさん、コメントをありがとうございました。
      自分のための備忘録としてサンプルコードを掲載してたので、まさかこのマクロを使っていただけるとは思っていませんでした。
      お役に立ててよかったです!

  2. ひら より:

    新田さんこんにちは。
    私、今年の2月に「字下げインデントを全角スペースやタブに変換するWordマクロ」
    について質問をさせて頂いた者です。
    その節はいろいろとご回答ありがとうございました。

    その後も新田さんが公開されている
    「文書中のすべての表を選択するWordマクロ」
    「【コード】画像とファイルパスを挿入するWordマクロ」
    「【コード】箇条書き、段落番号、ListNumフィールドの番号をテキストへ変換するWordマクロ」
    などを元に業務で使用するマクロを作成して、以前より効率よく仕事ができるようになりました。

    これは以前にも書かせて頂いた事ですが、
    Wordマクロについては元々情報が少ない中、新田さんが公開されているコードのおかげで
    私も含めて多くの方がこれまでより良い環境で仕事を行えるのだろうと思うと
    このブログと言うのは有意義な存在だなぁ、と改めて感じています。

    このままだと知恵をお借りっぱなしになってしまうので(笑)久しぶりにコメントをさせて頂きました。
    ありがとうございました。

    またよろしくお願いします。

    • 新田順也 より:

      ひらさん
      こんにちは。コメントをどうもありがとうございます。
      少しでもお役に立てているようでうれしいです。
      今後もお役に立てるように情報発信をしていきます!

  3. Taishi より:

    はじめまして。
    他の場所からコピーした表の体裁を一括で整える方法を探していたので非常に助かりました!
    ありがとうございます!

    • 新田順也 より:

      Taishiさん
      コメントをどうもありがとうございます。お役に立ててよかったです。
      このマクロには案外用途がありますね!

  4. TK より:

    ワード中に数十個ある表の体裁を合わせる作業をしなければならなかったので非常に助かりました!このマクロかなり使えます。ありがとうございます。

    • 新田順也 より:

      TKさん
      うれしいコメントをありがとうございます!お役に立ててよかったです。このマクロを作った当初は、使用方法をあまりイメージしていませんでしたが、表の体裁をあわあせに役立っているようですね。体裁は案件によって違いうるので、それをマクロで作りこむよりもその部分は手作業にしたほうがいいですよね。

トップへ戻る