XML というと、色々と複雑な構造が扱える便利なデータ格納形式です。これをWORD VBAで取り扱う方法を試してみましたので、備忘録に記載します。
まず、WORD を起動して「ツール」メニューから「マクロ」を選択して、適当な名称 "test" を入力して「作成」ボタンを押すと、Microsoft Visual Basic 環境が起動します。そう、WORD のVBAマクロは、実はVisual Basic が裏で走っていたのですね。
このVisual Basic の「ツール」メニューの参照設定を選択し、”Microsoft XML, v6.0”を選択します。XMLのクラスライブラリは後付で出来たので、こんな風に追加しなければならないようですね。これで、プログラム側は準備がととのいました。
サンプルのXML ファイルを作成します。Yahoo! の形態素解析のサンプルあたりがいいかな。
<?xml version="1.0" encoding="UTF-8" ?>
<ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn: yahoo:jp:jlp" xsi:schemaLocation="urn:yahoo:jp:jlp
http://jlp.yahooapis.jp/MAService/V1/parseResponse.xsd">
<ma_result>
<total_count>9</total_count>
<filtered_count>9</filtered_count>
<word_list>
<word>
<surface>庭</surface>
<reading>にわ</reading>
<pos>名詞</pos>
<baseform>庭</baseform>
</word>
<word>
<surface>に</surface>
<reading>に</reading>
<pos>助詞</pos>
<baseform>に</baseform>
</word>
<word>
<surface>は</surface>
<reading>は</reading>
<pos>助詞</pos>
<baseform>は</baseform>
</word>
<word>
<surface>二</surface>
<reading>2</reading>
<pos>名詞</pos>
<baseform>2</baseform>
</word>
<word>
<surface>羽</surface>
<reading>わ</reading>
<pos>名詞</pos>
<baseform>羽</baseform>
</word>
<word>
<surface>ニワトリ</surface>
<reading>にわとり</reading>
<pos>名詞</pos>
<baseform>ニワトリ</baseform>
</word>
<word>
<surface>が</surface>
<reading>が</reading>
<pos>助詞</pos>
<baseform>が</baseform>
</word>
<word>
<surface>いる</surface>
<reading>いる</reading>
<pos>動詞</pos>
<baseform>いる</baseform>
</word>
<word>
<surface>。</surface>
<reading>。</reading>
<pos>特殊</pos>
<baseform>。</baseform>
</word>
</word_list>
</ma_result>
<uniq_result>
<total_count>9</total_count>
<filtered_count>5</filtered_count>
<word_list>
<word>
<surface>庭</surface>
<reading>にわ</reading>
<pos>名詞</pos>
<baseform>庭</baseform>
<count>1</count>
</word>
<word>
<surface>二</surface>
<reading>2</reading>
<pos>名詞</pos>
<baseform>2</baseform>
<count>1</count>
</word>
<word>
<surface>羽</surface>
<reading>わ</reading>
<pos>名詞</pos>
<baseform>羽</baseform>
<count>1</count>
</word>
<word>
<surface>ニワトリ</surface>
<reading>にわとり</reading>
<pos>名詞</pos>
<baseform>ニワトリ</baseform>
<count>1</count>
</word>
<word>
<surface>いる</surface>
<reading>いる</reading>
<pos>動詞</pos>
<baseform>いる</baseform>
<count>1</count>
</word>
</word_list>
</uniq_result>
</ResultSet>
これををメモ帳に貼り付けて UTF-8 の文字コードで "sample.xml" の名前で保存します。
次に、Visual Basic Editor に、このサンプルコードを貼り付けます。
参考にしたのは、以下の掲示板です。
http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200605/06050060.txt
Sub test()
'
' test Macro
' 作成日 2009/12/15 作成者 izumi
'
Dim D As MSXML2.DOMDocument
Set D = New MSXML2.DOMDocument
D.async = False '同期読み込み
If D.Load(ThisDocument.Path & "\SAMPLE.XML") Then
MsgBox "読み込み成功"
'ルート要素ノードの名前
Debug.Print D.documentElement.nodeName
'ルート要素ノードが持つ属性の数
Debug.Print D.documentElement.Attributes.Length
'ルート要素ノードの0番目の属性名
Debug.Print D.documentElement.Attributes(0).nodeName
'ルート要素ノードの0番目の属性値
Debug.Print D.documentElement.Attributes(0).nodeValue
Else
MsgBox ThisDocument.Path & "\SAMPLE.XML"
MsgBox "読み込み失敗"
Debug.Print D.parseError.errorCode
Debug.Print D.parseError.reason
Debug.Print D.parseError.srcText
Debug.Print D.parseError.Line
Debug.Print D.parseError.linepos
End If
End Sub
これを動かすと、なんとかうまく「読み込み成功」のメッセージボックスが表示され、Visual Basic のイミディエイト・ウインドウに Debug.Print の出力が表示されました。
これだけでは何をしているのか、また何を作ろうとしているのかわからないと思います。そのうち詳しい内容をご説明できると思いますので、当該ブログを引き続きご覧になっていただければとおもいます。
最近のコメント