SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

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

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
配列のメモリアドレスをAPI関数に渡す

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

さなみ(サナミ)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2149 2008/02/26 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング