ウィリアムのいたずらの、まちあるき、たべあるきーPART2

gooブログ「ウィリアムのいたずらの、まちあるき、たべあるき」がお引越ししてきました

ExcelVBAで、WebサイトにアクセスしたりWebAPIやXMLを使う


まえに、メモで書いていた、ExcelのVBAを利用して、WebサイトにアクセスしたりWebAPIやXMLを使う方法についてまとめてみたいと思います。




■XMLなら、loadでできる

 XMLなら、MSXML2.DOMDocumentをつかえば、DomdocumentのLoadメソッドで、XMLを読み込んでくれます。このとき、ローカルだろうが、httpを使ったものだろうがOKです。

利用方法はこんな感じになります。
'//=================================//
'//                                 //
'//     xdocを使ったアクセス        //
'//                                 //
'//=================================//
Sub serverAccess1()
    Dim xdoc As Object
    Dim URL As String

    '   オブジェクトを作成
    Set xdoc = CreateObject("MSXML2.DOMDocument")
    xdoc.async = False
    
    '   URLをStringでDimしておかないとLoadでエラーになる
    URL = "http://dailynews.yahoo.co.jp/fc/domestic/rss.xml"
    If (xdoc.Load(URL) = False) Then
        MsgBox "アクセスできませんでした"
        Exit Sub
    End If
    
    '   取得したXMLの内容を出す
    MsgBox xdoc.XML

End Sub

(上記< > ¥は、本当は半角)

Loadをするまえに、xdoc.async = Falseとしています。
ここをfalseにすることで、読み終わった後、下に制御がきます。

xdoc.Load(URL) の読み込みが失敗した場合には、false,
うまくいけばtrueが帰ってきます。




■XMLHTTPで、webサイトに自由にアクセス

 上記の方法だと、XMLじゃないといけません。
 XML以外のwebサイトにも、GETだけでなく、POSTでもアクセスしたいという場合、
 AJAXで使う、Microsoft.XMLHTTPを利用します。

 利用方法は、こんな感じになります。
'//=================================//
'//                                 //
'//     XMLHTTPを使ったアクセス     //
'//                                 //
'//=================================//
Sub serverAccess2()
        On Error GoTo Err
 
    Dim xdoc As Object
    Dim httpObj
    
    Set httpObj = CreateObject("Microsoft.XMLHTTP")
    
    URL = "http://dailynews.yahoo.co.jp/fc/domestic/rss.xml"
    httpObj.Open "GET", URL, False
    httpObj.send ("")
    Set xdoc = httpObj.ResponseXML

    '   取得したXMLの内容を出す
    MsgBox xdoc.XML
    Exit Sub

Err:
    MsgBox "アクセスできませんでした"
End Sub

(上記< > ¥は、本当は半角)

httpObj.Openで、3番目の引数にfalseをおくっていて、
読み込み後、下の行に来るようにしています
AJAXでは、別のメソッドに送ることが多いですけど・・
ちなみに、ここ httpObj.Open("GET", URL, False)
とカッコをつけると、エラーになります
(括弧をつけたければ Call httpObj.Open("GET", URL, False)とかく)

今回は、XMLなので、httpObj.ResponseXMLで受けてしまいましたが、
httpObj.ResponseTextにすれば、XML以外の文字列を受け取ることが
可能です。

それと、httpObj.Openでエラーになった場合、Errのところに飛びます。




■参照設定について

 いつもだと、MSXML2.DOMDocumentをつかうため、参照設定で、
MicrosoftXMLを選んでいますけど、今回は、えらんでいません。

この場合、上記のようにCreateObjectをすれば、利用することは
出来るのですが、プログラムを書くときに、メソッド名が出てこない
ので、かなりつくりにくいとおもいます。
 つくるときには、参照設定をして、できあがったら、CreateObject
をいれて、dimのasをobjectにして、参照設定を切ったほうが、
つくりやすいかも・・