まえに、メモで書いていた、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にして、参照設定を切ったほうが、
つくりやすいかも・・