最近、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マクロ(きぬあささん)







