【VBA】Word文書内の表を削除する

エクセルVBAで使用するコードの備忘録。VBAで指定したWord文書内に含まれる表を削除するコード。

スポンサーリンク

Wordファイルを開く

Wordファイルを開くにはワードファイルを操作するためのオブジェクトを作成する必要があります。作成する際のコードの書き方は参照設定を使う場合とそうでない場合で異なりますが(詳しくはこちらをご覧ください)、基本的には参照設定を使うことをお勧めします。

参照設定は以下のように、VBAのコードエディタから「ツール > 参照設定」と進み、「Microsoft Word XX.X Object Library」にチェックを入れることで設定できます(XX.X部分の数字はバージョンによって変わります)。

パスワード付ファイルを開く方法などWordファイルを開く方法についてはこちらでも記載していますので詳しく知りたい場合はご参照ください。

Word文書の表を削除する

Word文書内に含まれる表(Table)はWord.Documentオブジェクト下のTablesオブジェクトで管理されています。文書内に複数の表が含まれる可能性が考えられるのでTablesオブジェクトは配列になっています。

表を全て削除する場合は、Tableがいくつ含まれるかをCountプロパティを使用して取得し、順番に削除していきます。ここで注意しなければならない点は、もちろんですが表は削除するとその都度含まれる表の数、すなわちCountプロパティの戻り値が変化します。そのため、下記のサンプルコードでは、表を削除する際にIndex番号が一番大きいものから順に削除しています。

なお、コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。

サンプルコード

Public Sub DeleteTablesInWord()
    
    '--- Wordのアプリケーションオブジェクト ---'
    Dim objWord As Word.Application
    Set objWord = New Word.Application
    objWord.Visible = True
        
    '--- 開くワードファイルのパス ---'
    Dim docPath As String
    docPath = "[ワードファイルのパス]"
    
    '--- ワードドキュメントを開く ---'
    Dim objDoc As Word.Document
    Set objDoc = objWord.Documents.Open(docPath)
    
    '--- 含まれる表の数 ---'
    Dim n As Long
    n = objDoc.Tables.Count
    
    '--- 表を削除 ---'
    Dim i As Long
    For i = 1 To n
        objDoc.Tables(n - i + 1).Delete
    Next i
    
    '--- ワードドキュメントを閉じる ---'
    objDoc.Close
    
End Sub