CodeZine(コードジン)

特集ページ一覧

VBAでファイルをダウンロードする

Windows APIを使ってWebからファイルをダウンロードする

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/02/26 14:00

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

目次

はじめに

 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関数に変数のメモリアドレスを渡したい場合は「参照渡し」を使います。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5