clsFTP

[ダウンロード]    サイズ:172KB  MD5:CED6F1CE39015782A56B3F15EA5B8B14
■解説index
■clsFTPとは
■ファイル構成
■プロパティ
■メソッド
■クラスモジュールの設定について
■標準モジュールについて
■INIファイルの書式について
■サンプルコード
■同梱のサンプルファイルについて
■開発履歴
clsFTPとは
FTP鯖への接続、ファイル操作をVBAで簡単に扱えるようにした
クラスモジュールです。
WinInet.DLLを使用するため、IE3.0以降がインストール済みであることが条件となります。
【  作  者  名  】  膳
【  ソ フ ト 名 】  clsFTP
【  バージョン  】  Ver1.01
【  作  成  日  】  2006/05/19
【  開 発 環 境 】  Access2002,Excel2002
【  対 応 機 種 】  Office2002が動く環境
【  再  配  布  】  可
【  転      載  】  可
※ネット上のコードをまとめただけなので、著作権は主張しません。
ファイル構成
readme.html
\Access
basINI.bas
basMyFnc.bas
basPath.bas
basWIN32_FIND_DATA.bas
clsFTP.cls
\Excel
basINI.bas
basMyFnc.bas
basPath.bas
basWIN32_FIND_DATA.bas
clsFTP.cls
\サンプル
\Access
FTP.ini
FTP.mdb
\Excel
FTP.ini
FTP.xls
プロパティ
clsFTPのプロパティは、値の取得のみ可能です。
※()内はデータ型。
UserType (String)
接続先の情報を呼び出すためのキー。
この値でiniファイルにセクションが作成されています。
CurrentDirectory (String)
現在の鯖側のカレントディレクトリを返す。
NoList (Boolean)
ファイルリストが作成されていない場合Trueを返します。
ListBOF (Boolean)
ListIndexが先頭よりも前の場合にTrueを返します。
NoList=Trueの場合も、Trueとなります。
ListEOF (Boolean)
ListIndexが末尾よりも後の場合にTrueを返します。
NoList=Trueの場合も、Trueとなります。
ListCount (Integer)
FileListのアイテム数を返します。(配列の添え字最大値-最小値+1)
Option Base ステートメントが記述されていなければ、添字の最小値は 0 になります。
ListIndex (Integer)
現在のリストインデックスの値を返します。
NoList、ListBOF、ListEOFがTrueの場合は、NoListIndexで設定した値が返ります。
File (FileDatas)
ListIndexの場所のファイル情報を返します。
ListIndexが配列の範囲外の場合は、「Error 9」を返します。
FileList (FileDatas)
指定されたIndexのファイル情報を返します。
自分でアクセスする位置を指定できるFileプロパティです。
指定されたIndexが配列の範囲外の場合は、「Error 9」を返します。
@Parameter
index (Integer)
  取得する配列の位置。
InternetHandle (Long)
インターネットハンドル。
FtpSessionHandle (Long)
FTPセッションハンドル。
メソッド
※()内はデータ型。
OpenFtp (Boolean)
FTP接続する。
@Parameter
UserType (String)
  接続先の情報を呼び出すためのキー。
CurrentDir (String)
  初期に設定するディレクトリ(絶対パス)。
  省略時、INIのFtpCurDir。
@Return
接続成功時、True。
CloseFtp (Boolean)
FTP接続を終了する。
@Return
成功時、True。
MoveDirectory (Boolean)
カレントディレクトリを移動する。
@Parameter
DirName (String)
  移動先のディレクトリ名
IsAbsolutePath (String)
  絶対パスでの指定ならばTrue   省略時、False
@Return
成功時、True。
UploadFile (Boolean)
ファイルをFTP鯖にアップロードする。
@Parameter
FilePath (String)
  ローカル側のファイルの絶対パス
TransType (FtpTransTypes)
  転送モード(バイナリ、アスキー)
  省略時、バイナリ。
@Return
成功時、True。
DownloadFile (Boolean)
ファイルをFTP鯖からダウンロードする。
@Parameter
FileName (String)
  ダウンロードするファイル名。
localDir (String)
  保存するフォルダパス(localDir + FileNameが保存パスになる)
TransType (FtpTransTypes)
  転送モード(バイナリ、アスキー)
  省略時、バイナリ。
@Return
成功時、True。
DeleteFile (Boolean)
ファイルをFTP鯖から削除する。
@Parameter
FileName (String)
削除するファイル名
@Return
成功時、True。
CopyFileList (FileDatas())
ファイルリストを全てコピーする。
@Return
FileDatasの配列。
SetFileList (Boolean)
カレントディレクトリのファイルリストをセットする。
SetFileListを使わない限り、ファイルリストは取得できません。
OpenFtp、MoveDirectory使用後にリストが必要な場合は必ずSetFileListを使用して下さい。
@Return
成功時、True。
MoveListFirst
ListIndexを先頭に移動させる。
MoveListLast
ListIndexを末尾に移動させる。
MoveListPrevious
ListIndexを前に移動させる。
MoveListNext
ListIndexを次に移動させる。
クラスモジュールの設定について
NoListIndex (定数)
リストが作成されていない場合にListIndexに与える値です。
ListIndexの範囲は、ファイルリストの添え字の最小値-1〜最大値+1になるため、
これと被らない値を設定して下さい。
初期設定では-100になっています。
■標準モジュールについて
clsFTPには、下記の標準モジュールが必要です。
basINI
・VBAでINIファイルを扱うためのモジュールです。
・KERNEL32.DLLを使用しています。
・INIファイルの名称は、モジュールのあるファイル名と同一になります。
Access
  CurrentProject.Name
  ftp.mdb → ftp.ini
Excel
  ActiveWorkbook.Name
  ftp.xls → ftp.ini
GetIniNameを変更することでこれを変えることができます。
・ファイルパスは、モジュールのあるファイルと同じディレクトリになります。
Access
  CurrentProject.Path
Excel
  ActiveWorkbook.Path
GetIniPathを変更することでこれを変えることができます。
・clsFTP内のSetFtpParameters(user As String)を変更し、INIファイルの呼び出しを止めた場合、
  このモジュールは必要ありません。
・basINIにはパスワードの暗号化機能はありません。必要がある場合は各自追加してください。
basPath
・パスの結合や分離などの機能をもったモジュールです。
basWIN32_FIND_DATA
・WinInet.DLLのFtpFindFirstで取得できるファイル情報を格納する構造体WIN32_FIND_DATAや、
  日付情報の構造体FileTime等をVBAで扱いやすくするためのモジュールです。
・clsFTPでは、ファイル情報をFileDatas構造体で扱っています。
  FileDatasはWIN32_FIND_DATAのファイル情報を変換し、
  VBAで扱いやすい形にした構造体です。
・Atteributes (FileAttributes)
ファイル情報を格納します。Long型ですが、FileAttributes列挙型で定義されています。
FileAttributes列挙型はGetFileAttributesStr関数で名称の文字列が取得可能です。
・WriteTime Date
ファイルの最終更新日を格納します。
ファイル作成日時、最終アクセス日時に関しては、さくらインターネットが 扱っていないようなのでバッサリと切り捨てました。
・FileSize Double
ファイルサイズのバイト数を格納します。
・FileName String
ファイル名を格納します。
basMyFnc
・「その他」の関数を入れたモジュールです。
INIファイルの書式について
セクション
clsFTPのプロパティUserTypeとなる。
FtpUser
FTP鯖にログインするときのユーザー名。
FtpPass
FTP鯖にログインするときのパスワード。
FtpHost
FTP鯖のアドレス。
FtpCurDir
FTP鯖のカレントディレクトリ(絶対パス)。
(例)
[User01]
FtpUser=UserName01
FtpPass=pass
FtpHost=xxx.xxxx.ne.jp
FtpCurDir=/home/user/www/
サンプルコード
Public Sub sample()
Dim ftp As New clsFTP
'接続
If Not ftp.OpenFtp("User01") Then
MsgBox "False時は接続失敗"
Exit Sub
End If
'ファイルをアップロードする
Const strUploadFile = "C:\upload.txt"
If Dir(strUploadFile) <> "" Then
If Not ftp.UploadFile(strUploadFile, ASCII) Then
MsgBox "False時はアップロード失敗"
End If
Else
MsgBox "ローカルにファイルがないとアップロード不可。" & vbCrLf & _
       "(UploadFile内部でも同様の処理を行っているため、省略可)"
End If
'ファイルをダウンロードする
Const strDownloadFile = "download.zip"
Const strLocalDir = "C:\"
If Dir(strLocalDir, vbDirectory) <> "" Then
If Not ftp.DownloadFile(strDownloadFile, strLocalDir, BINARY) Then
MsgBox "False時はダウンロード失敗"
End If
Else
MsgBox "保存先のフォルダが存在していなければダウンロード不可" & vbCrLf & _
       "(DownloadFile内部でも同様の処理を行っているため、省略可)"
End If
'ファイルを削除する
Const strDeleteFile = "delete.txt"
If Not ftp.DeleteFile(strDeleteFile) Then
MsgBox "False時は削除失敗。"
End If
'ファイルリストをセットする。
If Not ftp.SetFileList Then
MsgBox "False時はセット失敗"
End If
'ファイル情報を列挙
If Not ftp.NoList Then
Do While Not ftp.ListEOF
Debug.Print "ファイル名", ftp.File.FileName
Debug.Print "ファイルサイズ", ftp.File.FileSize
Debug.Print "最終更新日", ftp.File.WriteTime
Debug.Print "ファイル属性", ftp.File.Attributes
Debug.Print "----------------------------------"
'インデックスの移動
ftp.MoveListNext
Loop
End If
'ディレクトリの移動
If Not ftp.MoveDirectory("img") Then
MsgBox "False時は移動失敗"
End If
'一つ上の階層に戻る
If Not ftp.MoveDirectory("../") Then
MsgBox "False時は移動失敗"
End If
'ファイルリストを変数に保存
Dim FileList() As FileDatas
FileList = ftp.CopyFileList
'接続を閉じる
If Not ftp.CloseFtp Then
MsgBox "False時は失敗"
End If
End Sub
同梱のサンプルファイルについて
各フォームの機能
frm接続先一覧
スタートアップフォームです。
ここで接続先の選択、設定変更の呼び出しを行います。
frmFTPサンプル
FTP鯖に接続してファイルリストを取得するだけの簡単なフォームです。
リストから、ディレクトリダブルクリックで下層へ進めますが、戻る機能はありません。
[ファイル一覧出力]は、Access版ではcsvファイルで、 Excel版ではoutputシートにそれぞれカレントディレクトリのファイル一覧を書き出します。
frm接続先の設定
INIファイルを編集するためのフォームです。
サンプルではUserTypeセクションを作成し、行番号から接続先のセクション名を取得しています。
初期状態では、パラメータの設定がされていないため、接続テストを行う場合は、 ここでユーザー設定を書き替える必要があります。
Access版、Excel版ともにOffice2002で作成しています。
Excel版の動作については未保証です。
開発履歴
Ver1.01(2006/05/19)
  FileTimeをDate型(yyyy/mm/dd hh:mm:ss)に変換するときに「分」の処理がおかしかったのを修正。
Ver1.00(2006/04/26)
  公開。
TOPへ