はてなブックマークに追加
Facebookでシェア
Google+でシェア
Twitterでシェア
1.FTPやHTTPを使うときの基本
HTTPやFTPなどインターネットのサービスを使うときの基本もオープンとクローズで、これらの処理はAPI関数を使って行います。VBAの命令にはインターネットサービスを利用するための命令が無いためです。

インターネットのサービスを使用するには、wininet.dllというDLLの中にある、InternetOpenでインターネットサービスのオープン、InternetCloseHandleでインターネットサービスのクローズを行います。

参考までに、Access VBA以外に、Excel VBA(エクセルマクロ)など他のVBAでも使用することができます。
API関数/InternetOpenを定義する
API関数を使うとき、まずはこの関数がどこにある・どんな関数であるかといった、この関数を使うための準備(API関数の宣言)が必要です。また、定義する場所はフォーム、モジュール、クラスモジュールの(General)(Declarations)です。

次の例は、API関数/InternetOpenを使うときの記述例です。API関数を使用するときは、ついでにAPI関数で使用する定数も定義しておきましょう。

'(General)(Declarations)へ記述します
Private Declare Function InternetOpen _
            Lib "wininet.dll" _
          Alias "InternetOpenA" _
         (ByVal lpszAgent As String _
        , ByVal dwAccessType As Long _
        , ByVal lpszProxyName As String _
        , ByVal lpszProxyBypass As String _
        , ByVal dwFlags As Long) As Long

'dwAccessType(接続方法)
'全てのホスト名をローカルで解決します
Private Const INTERNET_OPEN_TYPE_DIRECT    As Long = &H1
'既存の設定(要はIEの設定)を利用します
Private Const INTERNET_OPEN_TYPE_PRECONFIG As Long = &H0
'プロキシサーバ経由で接続します
Private Const INTERNET_OPEN_TYPE_PROXY     As Long = &H3

'dwFlags(ネットワーク使用有無)
'サーバーから取得します
Private Const INTERNET_FLAG_ASYNC       As Long = &H10000000
'キャッシュから取り出します(ネットワークを使用しません)
Private Const INTERNET_FLAG_FROM_CACHE  As Long = &H1000000
 ※決まり事なので、悩まずにコピペして使ってしまいましょう

なお、この関数の戻り値にはインターネットサービスを使用するための管理番号(インターネットハンドル)が返ります。( )内に記述している引数は、以下を参照してください。

 ◆InternetOpenの引数
ByVal lpszAgent As String ユーザーエージェント(環境変数のHTTP_USER_AGENT)を指定します。省略するときはvbNullStringを指定します。
ByVal dwAccessType As Long 接続方法を指定します。基本的には、INTERNET_OPEN_TYPE_PRECONFIG(既存の設定を使う)でかまいません。
ByVal lpszProxyName As String プロキシサーバ経由で接続するときの指定です。dwAccessTypeINTERNET_OPEN_TYPE_PRECONFIGを指定するときは、vbNullStringを指定します。
ByVal lpszProxyBypass As String プロキシサーバ経由で接続するときの指定です。dwAccessTypeINTERNET_OPEN_TYPE_PRECONFIGを指定するときは、vbNullStringを指定します。
ByVal dwFlags As Long ネットワークを使うか、使わないかの指定です。通常は0(ゼロ)を指定しておけばOKです。
API関数/InternetCloseHandleを定義する
同じように、API関数の宣言を行います。定義する場所はフォーム、モジュール、クラスモジュールの(General)(Declarations)です。

次の例は、API関数/InternetCloseHandleを使うときの記述例です。

'(General)(Declarations)へ記述します
Private Declare Function InternetCloseHandle _
            Lib "wininet.dll" _
         (ByVal hInternet As Long) As Integer
 ※決まり事なので、悩まずにコピペして使ってしまいましょう

なお、この関数の戻り値にはインターネットサービスをクローズした結果が返ります。Trueが成功・Falseが失敗ですが(ただし、CBool関数で変換が必要)、特に気にする必要はありません。( )内に記述している引数は、以下を参照してください。

 ◆InternetCloseHandleの引数
ByVal hInternet As Long クローズするインターネットハンドル(InternetOpenで取得した管理番号)を指定します。
使用例
InternetOpenInternetCloseHandleの使用例です。Subプロシージャ「prcInternetSample」を実行すると、インターネットサービスのオープンとクローズを行います。

インターネットのサービスを使用するには、最初にInternetOpenを実行しインターネットのオープンを行います。InternetOpenを実行するとインターネットハンドルというインターネットを使用するための管理番号を取得できますが、これはHTTPやFTPといった各種のサービスと接続するときに必要な管理番号なので、いつでも使えるように保存しておきましょう。

また、オープンしたインターネットは最後にクローズを行わなくてはなりません。クローズするときは、クローズするインターネットハンドルを指定しInternetCloseHandleを実行します。

例では、Functionプロシージャ「fcInternetOpen」でインターネットサービスのオープン、Functionプロシージャ「fcInternetClose」でインターネットサービスのクローズを行っています。インターネットハンドル(インターネットを使用するための管理番号)は、グローバル変数「lngWinINet」へ保存し各プロシージャ間で共有しています。

なお、APIを実行したときの結果コードErr.LastDllErrorに返ります。0なら正常終了、0以外は失敗です。

'変数の定義 ※(General)(Declarations)です
Private lngWinINet As Long 'インターネットハンドルの保存用


Sub prcInternetSample()

    'インターネットサービスをオープンします
    Call fcInternetOpen

    'インターネットサービスをクローズします
    Call fcInternetClose

End Sub


Function fcInternetOpen() As Long

    'APIの実行/インターネットサービスをオープン
    lngWinINet = InternetOpen(vbNullString _
                            , INTERNET_OPEN_TYPE_PRECONFIG _
                            , vbNullString _
                            , vbNullString _
                            , 0)

    'この関数の戻り値には、APIの処理結果コードを返します
    fcInternetOpen = Err.LastDllError

End Function


Function fcInternetClose() As Long

    'APIの実行/インターネットサービスをクローズ
    Call InternetCloseHandle(lngWinINet)

    'この関数の戻り値には、APIの処理結果コードを返します
    fcInternetClose = Err.LastDllError

End Function
 ※この他に、API関数を定義する必要があります。


Copyright(C) 1999-2015 結城圭介(Ver.3.51) All rights reserved