Windows APIを使ってWebからファイルをダウンロードする
さなみ [著] 2008/02/26 14:00

VBA環境でWindows APIを使ってWebからファイルをダウンロードする方法を紹介します。同時に、バイト型(Byte)配列を使ってVBAでバイナリデータを扱う方法も紹介します。

1 2 3 →

はじめに

 VBA環境でWindows APIを使ってWebからファイルをダウンロードする方法を紹介します。同時に、バイト型(Byte)配列を使ってVBAでバイナリデータを扱う方法も紹介します。

対象読者

  • VBA環境からWindows APIを利用されている方
  • VBAでWebからファイルをダウンロードする必要のある方
  • VBAでバイナリデータを扱う方

 なお、VBAからWindows APIを呼び出す方法については、以下のMSDNなどを参照してください。

必要な環境

  • Windows VistaまたはWindows XP
  • VBA開発環境(サンプルではExcelを使います)

WinInet関数

 WebからのダウンロードにはWin32インターネット拡張機能(WinInet)を使います。

 具体的には、以下の順番でWinInet関数を呼び出します。

  1. InternetOpen()でWinInetを初期化する
  2. InternetOpenUrl()でURLを開く
  3. InternetReadFile()を複数回呼び出してデータを読み取る
  4. InternetCloseHandle()でハンドルを開放する

 WinInet関数を呼び出すには、Declareステートメントで関数を宣言する必要がありますが、テンプレートは以下のページからダウンロードできます。テンプレートを参照するには「vbinet.exe」をダウンロードし解凍してください。

「値渡し」と「参照渡し」

 VBAの関数に引数を渡す場合、「値渡し」と「参照渡し」があります。

 VBAのデフォルトの動作は「参照渡し」ですが、関数定義時にByValを使うと「値渡し」になります。

Declareステートメントの例
'値渡し(ByValを使用)
Declare Function SetFocus Lib "user32" Alias "SetFocus" (_
                                         ByVal hwnd As Long) As Long

'参照渡し(デフォルト)
Declare Sub GetSystemTime Lib "kernel32" Alias "GetSystemTime" (_
                                         lpSystemTime As SYSTEMTIME)

 DeclareステートメントでAPI関数を宣言するとき、どちらを使うかによって次のような動作の違いがあります。

値渡し関数は渡された変数の値を受け取る
参照渡し関数は渡された変数のメモリアドレスを受け取る

 API関数に変数のメモリアドレスを渡したい場合は「参照渡し」を使います。


1 2 3
→
INDEX
VBAでファイルをダウンロードする
Page1
はじめに
対象読者
必要な環境
WinInet関数
「値渡し」と「参照渡し」
配列のメモリアドレスをAPI関数に渡す
動的配列を使ってデータをダウンロードする
まとめてファイルへ書き込む
まとめ
参考資料
プロフィール
さなみ サナミ


記事へのコメント・トラックバック機能は2011年6月に廃止させていただきました。記事に対する反響はTwitterやFacebook、ソーシャルブックマークサービスのコメントなどでぜひお寄せください。

スポンサーサイト