ExcelVBA

VBAでIE操作「ファイルをPCにダウンロードする」【エクセルマクロ】

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パラメータ

引数パラメータ設定値
1pCaller0(固定)
2szURLダウンロードするURL
3szFileName保存先パス
4dwReserved0(固定)
5lpfnCB0(固定)

注意点

その他

Internet Explorerを使用して、Webスクレイピングは敷居が高い風に捉えられますが、
上記のように、パーツ化して組み合わせ処理するだけです。

Web上のデータを触りたい要望は会社様でも個人様でも多いと思います。
VBA IE操作を覚えて効率化しませんか?
作成が大変であれば弊社で代行開発も可能です。お気軽にお問い合わせください。

 

コメント

タイトルとURLをコピーしました