VBAでIEを起動し、画像ファイルなどをダウンロードしたい時があります。
Win32APIのURLDownloadToFileでダウンロードする事が可能です。
Webページの画像をダウンロードするサンプルコード
'■URLDownloadToFileを使用宣言 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 '■DeleteUrlCacheEntryを使用宣言 Declare Function DeleteUrlCacheEntry Lib "wininet" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long '■Internet Explorerでファイルダウンロードするサンプルコード Sub sample_IE_data_download() Dim objIE As Object Dim obj As Object '■IE起動→該当ページへ遷移 Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "https://vba-create.jp/" Call Call_IE_WaitTime For Each obj In objIE.document.images '■ダウンロード対象のキャッシュをクリア Call DeleteUrlCacheEntry(obj.href) '■絶対パス付きファイル名(hrefが存在するもの)のみダウンロードを行う。 If obj.href <> "" Then Call URLDownloadToFile(0, obj.href, ThisWorkbook.Path & "\" + obj.nameProp, 0, 0) Next obj End Sub
URLDownloadToFileパラメータ
引数 | パラメータ | 設定値 |
1 | pCaller | 0(固定) |
2 | szURL | ダウンロードするURL |
3 | szFileName | 保存先パス |
4 | dwReserved | 0(固定) |
5 | lpfnCB | 0(固定) |
注意点
- サーバーに対して休み無く、アクセスすることを控えましょう。DDoS攻撃とみなされる恐れがあります。
- スクレイピングは優れた技術ですが、節度を持った対応を心がけましょう。
- 上記コードのみでは動作しません。下記記事のパーツ化した処理を入れましょう。
VBAでIE操作「ブラウザの読込待ち」処理をパーツ化する【エクセルマクロ】
その他
Internet Explorerを使用して、Webスクレイピングは敷居が高い風に捉えられますが、
上記のように、パーツ化して組み合わせ処理するだけです。
Web上のデータを触りたい要望は会社様でも個人様でも多いと思います。
VBA IE操作を覚えて効率化しませんか?
作成が大変であれば弊社で代行開発も可能です。お気軽にお問い合わせください。
コメント