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操作を覚えて効率化しませんか?
作成が大変であれば弊社で代行開発も可能です。お気軽にお問い合わせください。



コメント