|

|
|
 |
1.FTPやHTTPを使うときの基本 |
 |
|
|
|
|
|
HTTPやFTPなどインターネットのサービスを使うときの基本もオープンとクローズで、これらの処理はAPI関数を使って行います。VBAの命令にはインターネットサービスを利用するための命令が無いためです。
インターネットのサービスを使用するには、wininet.dllというDLLの中にある、InternetOpenでインターネットサービスのオープン、InternetCloseHandleでインターネットサービスのクローズを行います。
参考までに、Access VBA以外に、Excel VBA(エクセルマクロ)など他のVBAでも使用することができます。
|
|
|
|
|
|
|
|
|
|
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 |
プロキシサーバ経由で接続するときの指定です。dwAccessTypeにINTERNET_OPEN_TYPE_PRECONFIGを指定するときは、vbNullStringを指定します。
|
| ByVal lpszProxyBypass As String |
プロキシサーバ経由で接続するときの指定です。dwAccessTypeにINTERNET_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で取得した管理番号)を指定します。
|
|
|
|
|
|
|
|
|
|
|
InternetOpenとInternetCloseHandleの使用例です。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関数を定義する必要があります。
|
|
|
|
|