2.HTTPやFTPサーバへ接続するには
HTTPやFTPサーバへ接続するときは、API関数/InternetOpenでインターネットサービスをオープンした後、API関数/InternetConnectを使って行います。切断するときは切断するときはInternetCloseHandleを使います。

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

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

'(General)(Declarations)へ記述します
Private Declare Function InternetConnect _
            Lib "wininet.dll" _
          Alias "InternetConnectA" _
         (ByVal hInternet As Long _
        , ByVal lpszServerName As String _
        , ByVal nServerPort As Integer _
        , ByVal lpszUsername As String _
        , ByVal lpszPassword As String _
        , ByVal dwService As Long _
        , ByVal dwFlags As Long _
        , ByVal dwContext As Long) As Long

'nServerPort(接続ポート)
'FTP
Private Const INTERNET_DEFAULT_FTP_PORT    As Integer = 21
'GOPHER
Private Const INTERNET_DEFAULT_GOPHER_PORT As Integer = 70
'HTTP
Private Const INTERNET_DEFAULT_HTTP_PORT   As Integer = 80
'HTTPS
Private Const INTERNET_DEFAULT_HTTPS_PORT  As Integer = 443
'SOCK
Private Const INTERNET_DEFAULT_SOCKS_PORT  As Integer = 1080

'dwService(サービスの種類)
'FTP
Private Const INTERNET_SERVICE_FTP    As Long = 1
'GOPHER
Private Const INTERNET_SERVICE_GOPHER As Long = 2
'HTTP
Private Const INTERNET_SERVICE_HTTP   As Long = 3

'dwFlags(オプション)
'PASSIVEモードで接続(FTP時)
Private Const INTERNET_FLAG_PASSIVE = &H8000000
 ※決まり事なので、悩まずにコピペして使ってしまいましょう

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

 ◆InternetConnectの引数
ByVal hInternet As Long InternetOpenで取得したインターネットハンドルを指定します。
ByVal lpszServerName As String 接続するサーバのIPアドレス、またはドメイン名を指定します。
ByVal nServerPort As Integer 接続するサーバのポート番号を指定します。通常は、HTTPサービスを使用するならINTERNET_DEFAULT_HTTP_PORT、FTPサービスを使用するならINTERNET_DEFAULT_FTP_PORTを指定すればOK。
ByVal lpszUsername As String FTPサービスを使用するときは、ここへログインユーザIDを指定します。
ByVal lpszPassword As String FTPサービスを使用するときは、ここへログインパスワードを指定します。
ByVal dwService As Long 使用するサービスの種類を指定します。HTTPを使うならINTERNET_SERVICE_HTTP、FTPサービスを使うならINTERNET_SERVICE_FTPです。
ByVal dwFlags As Long FTPサービスで、PASSIVEモードを使用するときはINTERNET_FLAG_PASSIVE、使用しないときは0を指定します。なお、HTTPサービスを使用するときは0を指定します。
ByVal dwContext As Long 0を指定しておいてOKです。
InternetConnectの使用例/FTPサーバへ接続する
InternetConnectを使って、FTPサーバへ接続する例です。Subプロシージャ「prcFTPConnectSample」を実行すると、FTPサーバへの接続と切断を行います。

FTPサーバへ接続するには、最初にInternetOpenを実行しインターネットサービスのオープンを行います。オープンに成功し、インターネットハンドル(例ではlngWinINetへ保存)を取得したら、このインターネットハンドルを使ってInternetConnectを実行しFTPサーバへ接続ます。なお、FTPサーバへ接続するときは、サーバ名に加えてユーザIDパスワードの指定が必要です。
例では、Functionプロシージャ「fcFTPConnect」で、渡された引数の内容を使い(Serverが"ftp.happy-happy-island.net"、Userが"happy"、Pswが"island"、ただし全て架空)FTPサーバに接続。FTPサーバへ接続したときに取得できるコネクションハンドルは、グローバル変数lngFtpHndへ保存し各プロシージャ間で共有できるようにしています。

次に、FTPサーバから切断する処理です。切断するときは、切断するハンドルを指定しInternetCloseHandleを実行します。例では、Functionプロシージャ「fcFTPDisConnect」でFTPサーバからの切断を実行、指定しているハンドルは接続のときに取得したFTPコネクションハンドル(例ではlngFtpHnd)です。

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

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


Sub prcFTPConnectSample()

    Dim lngRC As Long

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

    'オープンに成功したらFTPサーバとの接続と切断を行います
    If lngRC = 0 Then

       'FTPサーバへ接続します
       Call fcFTPConnect("ftp.happy-happy-island.net", "happy", "island")

       'FTPサーバから切断します
       Call fcFTPDisConnect

    End If

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

End Sub


Function fcFTPConnect(Server As String, User As String, Psw As String) As Long

    'APIの実行/FTPサーバへ接続
    lngFtpHnd = InternetConnect(lngWinINet _
                              , Server _
                              , INTERNET_DEFAULT_FTP_PORT _
                              , User _
                              , Psw _
                              , INTERNET_SERVICE_FTP _
                              , 0 _
                              , 0)

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

End Function


Function fcFTPDisConnect() As Long

    'APIの実行/FTPサーバから切断
    Call InternetCloseHandle(lngFtpHnd)

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

End Function


Function fcInternetOpen() As Long

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

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

End Function


Function fcInternetClose() As Long

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

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

End Function
 ※この他に、API関数を定義する必要があります。
 ※ftp.happy-happy-island.netは架空のドメイン名です。
InternetConnectの使用例/HTTPサーバへ接続する
InternetConnectを使って、HTTPサーバへ接続する例です。Subプロシージャ「prcHTTPConnectSample」を実行すると、HTTPサーバへの接続と切断を行います。

HTTPサーバへ接続するときも、FTPサーバへ接続するときとほとんど同じです。最初にInternetOpenを実行しインターネットサービスのオープンを行います。オープンに成功し、インターネットハンドル(例ではlngWinINetへ保存)を取得したら、このインターネットハンドルを使ってInternetConnectを実行しHTTPサーバへ接続ます。なお、HTTPサーバへ接続するときに指定するのはサーバ名のみです。
例では、Functionプロシージャ「fcHTTPConnect」で、渡された引数の内容を使い(Serverへ"www.happy-happy-island.net"、ただし全て架空)HTTPサーバに接続。HTTPサーバへ接続したときに取得できるコネクションハンドルは、グローバル変数lngHTTPHndへ保存し各プロシージャ間で共有できるようにしています。

次に、HTTPサーバから切断する処理です。FTPサーバから切断するときと同じように、切断するハンドルを指定しInternetCloseHandleを実行します。例では、Functionプロシージャ「fcHTTPDisConnect」でHTTPサーバからの切断を実行、指定しているハンドルは接続のときに取得したHTTPコネクションハンドル(例ではlngHttpHnd)です。

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

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


Sub prcHTTPConnectSample()

    Dim lngRC As Long

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

    'オープンに成功したらHTTPサーバとの接続と切断を行います
    If lngRC = 0 Then

       'HTTPサーバへ接続します
       Call fcHTTPConnect("www.happy-happy-island.net")

       'HTTPサーバから切断します
       Call fcHTTPDisConnect

    End If

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

End Sub


Function fcHTTPConnect(Server As String) As Long

    'APIの実行/HTTPサーバへ接続
    lngHTTPHnd = InternetConnect(lngWinINet _
                              , Server _
                              , INTERNET_DEFAULT_HTTP_PORT _
                              , vbNullString _
                              , vbNullString _
                              , INTERNET_SERVICE_HTTP _
                              , 0 _
                              , 0)

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

End Function


Function fcHTTPDisConnect() As Long

    'APIの実行/HTTPサーバから切断
    Call InternetCloseHandle(lngHTTPHnd)

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

End Function


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関数を定義する必要があります。
 ※www.happy-happy-island.netは架空のドメイン名です。
Copyright(C) 1999-2006 結城圭介。 All rights reserved