最近、Wordファイルの検証をお客様から依頼されまして、様々な観点から検証をしていました。
特定の操作をするとWordが落ちてしまうという現象がありその原因を探しました。
現時点では原因はわからずじまいなのですが、そのときに作成したWordマクロが便利なので紹介します。
このマクロでできること
カーソルがある表のセル毎にXMLデータをVBEのイミディエイトウィンドウに表示します。
以下のように縦方向の結合や横方向の結合がされている表でもエラーが発生しません。
以下のように出力されます。
マクロの解説
XMLデータを文書全体で取得する方法を以前の記事(【コード】WordのXMLデータを操作するWordマクロ )で紹介しました。
今回はセル単位で取得しようというものです。
Microsoft MVP(Office Development)のきぬあささんの「すべてのテーブルの結合を解除するWordマクロ」を参考にしてコードを書きました。
行毎に列数を計算して処理をしています。(30行目)
32行目でイミディエイトウィンドウに書き込んでいます。
出力されるXMLデータの解釈については専門のサイトで調べてみてください。
マクロ
Sub 表のセルのXMLデータを出力する() Dim myXML As Object Dim i As Long Dim iMax As Long Dim n As Long Dim nMax As Long Dim myTable As Table '------------------------------------------- '前処理 '------------------------------------------- If Selection.Information(wdWithInTable) = False Then MsgBox "表を選択してください。", vbExclamation, "お知らせ" Exit Sub Else Set myTable = Selection.Tables(1) End If Set myXML = CreateObject("MSXML2.DOMDocument") '------------------------------------------- 'セル毎のXMLデータの取得 '------------------------------------------- If myXML.LoadXML(myTable.Range.XML) = True Then With myXML.SelectNodes("/w:wordDocument/w:body/wx:sect/w:tbl/w:tr") iMax = .Length - 1 '最大行数 For i = 0 To iMax With .Item(i).SelectNodes("w:tc") nMax = .Length - 1 '行内の最大列数 For n = 0 To nMax Debug.Print .Item(n).XML Next n End With Next i End With End If '------------------------------------------- '後処理 '------------------------------------------- Set myXML = Nothing Set myTable = Nothing End Sub
関連記事
【コード】表中の結合されたセルを着色するWordマクロ(その2) ←バグあり
【コード】表中の結合されたセルを着色するWordマクロ(その3)
すべてのテーブルの結合を解除するWordマクロ(きぬあささん)