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

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

https://www.vba-ie.net/

https://www.vba-ie.net/element/subroutine-filedownload.html

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

弊社が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のファイルがダウンロードされます。

About

You may also like...

Your email will not be published. Name and Email fields are required