VBAでのインターネットアクセスのメモ
IEオブジェクトを使う
重たそう? 途中で対話形式に持ってゆけるので 認証処理がややこしいときは手動でなんとかできる。ページ保存はCSSや画像も一緒に保存できる。
Sub usingIE() Dim oIE as InternetExplorer Set oIE = CreateObject("InternetExplorer.Application") oIE.Width = 800 oIE.Height = 600 oIE.Left = 0 oIE.Top = 0 oIE.Visible = True oIE.Navigate "http://・・・・・・" Do Until oIE.Busy = False Application.Wait Time:=Now + TimeValue("00:00:01") Loop oIE.document.Title = "****" 'タイトルにするとファイル名になる oIE.execWB OLECMDID_SAVEAS, false 'ダイアログがでる End Sub
URLDownloadToFile を使う
簡単。CSSや画像は別途解析して、ダウンロードが必要。
Private Declare Function URLDownloadToFile Lib _ "urlmon" Alias "URLDownloadToFileA" ( _ ByVal pCaller As Long, ByVal szURL As String, _ ByVal szFileName As String, _ ByVal dwReserved As Long, _ ByVal lpfnCB As Long) As Long Sub DownloadFile() Dim sURL as String Dim sFilePath as String Dim rc sURL = "http://・・・・・・" sFilePath = "保存ファイルパス.htm" rc = URLDownloadToFile(0, sURL, sFilePath, 0, 0) End Sub
XMLHTTPを使用
これは万能。ページ上の細かい要素に比較的アクセスしやすい。
(メソッドまわり) http://japan.internet.com/developer/20051005/28.html
Sub PrintHttpDoc() Dim oHttp As Object Dim sURL As String sURL = "http://・・・・・" Set oHttp = CreateObject("MSXML2.XMLHTTP") With oHttp .Open "GET", sURL, False .Send Debug.Print .responseText Debug.Print .Status '200-300 End With Set oHttp = Nothing End Sub
wininet.dllの使用
めんどくさいが、細かい接続処理が可能。膨大なAPI関数の宣言が必要。
http://www.happy2-island.com/access/gogo03/capter90100.shtml
各APIを呼んだ後は、Err.LastDllErrorでエラー処理
Sub getFile() Dim hWIN as Long, hHTTP as Long, hREQ as Long Dim strBuf as Sring * 1024 Dim GetLen as Long Dim tmpIndex As Long Dim sServer as String, sURL As String * 255 Dim lStat as Long hWIN = InternetOpen(vbNullString, INTERNET_OPEN_TYPE_PRECONFIG _ , vbNullString, vbNullString, 0) sServer = "www.********.net" hHTTP = InternetConnect(hWIN, sServer , INTERNET_DEFAULT_HTTP_PORT _ , vbNullString, vbNullString _ , INTERNET_SERVICE_HTTP, 0 , 0) sURL = "page1.html" hREQ = HttpOpenRequest(hHTTP, "GET", sURL _ , "HTTP/1.1" _ , vbNullString, 0 _ , INTERNET_FLAG_RELOAD, 0) Call HttpSendRequest(hREQ, vbNullString, 0, vbNullString, 0) strBuf = vbNullString GetLen = 1024 '初期値はstrBufの長さ tmpIndex = 0 Call HttpQueryInfo(hREQ, HTTP_QUERY_STATUS_CODE _ , ByVal strBuf, GetLen, tmpIndex) lStat = CLng(strBuf) Call InternetReadFile(hREQ, tmpBuf(0), 1024, GetLen) 'tmpBufにデータ、1024ばtmpBufのサイズ、GetLenに取り込んだバイトが返る '必要ならぐるぐる回す Call InternetCloseHandle(hREQ) Call InternetCloseHandle(hHTTP) Call InternetCloseHandle(hWIN) End Function