Excel VBAでWindows APIの 関数を使ってファイルをWEBからダウンロード(URLDownloadToFile関数)

ExcelVBA

参照 https://tonari-it.com/excel-vba-windowsapi-urldownloadtofile/

VBAのIE制御入門 | IE操作の自動化
VBAによるIE制御やデータ取得など基本的なものから実践向けの内容まで幅広くカバーしている入門サイト。VBAのIE(Internet Explorer)操作を理解できれば複雑なプログラムも簡単に作成でき作業の効率化が図れます。
VBAでIEのファイルをダウンロードするプロシージャ | IE操作の自動化
エクセルVBAでIEの画像やPDFなどファイルをダウンロードして保存するプロシージャの作成方法について解説しています。今回はダウンロードに必要はURLDownloadToFileとDeleteUrlCacheEntryのAPIを利用した方法で紹介しています。

マイクロソフト Windows API リストhttps://msdn.microsoft.com/ja-jp/windows/hh240557

弊社がVBA開発の際にスキル・ノウハウを全開放で提供をしている理由
Excel作業などを自動化できるVBAマクロは即効性のある業務効率化を期待できます。弊社はVBAマクロの開発をお受けしておりますが、それとともにスキルやノウハウも合わせて提供させて頂いております。

①まずは宣言セクションでURLDownloadToFileの宣言

Windows APIを使用するには、まずVBAコードの宣言セクションで、「このWindows APIを使います」という宣言が必要です。URLDownloadToFile関数はurlmonというDLLに含まれていますので、API名にはURLDownloadToFileを、DLL名にはurlmonを指定します。そしてこの関数はLong型の返り値を返してくれますので、Long型で宣言しておきましょう。

Private Declare PtrSafe 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

特に値を指定したりするのはszURLszFileNameの2つで、それぞれの役割と型がこちら。

  • szURL ダウンロードしたいファイルのURLを関数に渡すもの。String型。
  • szFileName  ダウンロードしたファイルを保存するパスをAPIに渡すもの。String型。

szURLとszFileName以外3つの変数は”0″を渡すだけなので、このままでも問題ありません。

そしてコード部分でURLDownloadToFile関数を呼び出す際の記述がこちら。

変数 = URLDownloadToFile(0, ファイルのURL, ファイルを保存するパス, 0, 0)

変数に返された値が0ならファイルダウンロード完了、それ以外ならダウンロードできていないということになります。

②このWindows APIでファイルをダウンロードしてみる

Option Explicit
Private Declare PtrSafe 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 Download_File()
Dim lngRes As Long
Dim strURL As String
Dim strPath As String
     
    strPath = “C:\Users\users\Desktop\File\画像.png”
    strURL = “https://www.google.co.jp/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png”;
    
    lngRes = URLDownloadToFile(0, strURL, strPath, 0, 0)
    If lngRes = 0 Then
        MsgBox “ダウンロード完了!”
    Else
        MsgBox “ファイルをダウンロードできませんでした”
    End If
End Sub

このコードを実行してみると、引数の”strPath”に指定したパスに、strURLで指定したURLのファイルがダウンロードされます。

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