BASP21については、ご自身で調べてくださいな。
FTPサーバーに対してファイルを送受信するときは、BASP21のFTPオブジェクトを使います。
処理は、(1)FTPサーバーと接続する(Connect)→(2)任意の処理を行う→FTPサーバーとの接続を切断する(Close)となります。
まずConnectメソッドを実行してFTPサーバーとの接続を確立します。Connectメソッドの構文は次の通りです。
rc = ftp.Connect(Dest,User,Pass)
引数Destには、接続するFTPサーバー名を指定します。
引数Userと引数Passは、FTPサーバーの接続に必要なユーザー名とパスワードです。
Connectメソッドは接続の結果を数値で返します。接続に成功したときには0が返ります。その他のエラーコードはBASP21のヘルプをご覧ください。
ファイルの送信にはPutFileメソッドを使います。PutFileメソッドの構文は次の通りです。
rc = ftp.PutFile(Local,Remote[,Type])
引数Localには送信する(ローカル側の)ファイル名を指定します。「C:\tmp\sample.dat」のようにフルパスを指定してください。
引数Remoteには保存する(FTPサーバー側の)フォルダを指定します。引数Remoteを空欄にするとルートフォルダに保存されます。たとえば、ftp.xxxxx.com/test/subの場合は「test/sub」のように指定します。
引数Typeは省略可能です。送信するデータの形式を指定します。省略するとテキストファイル(ASCII)が指定されたものとします。
PutFileメソッドは送信に成功すると、送信したファイルの数を返します。
次のサンプルは、[ファイルを開く]ダイアログボックスで選択したファイルを、指定したFTPサーバーの「test/sub」フォルダに送信します。なお、サーバー名やアカウント、パスワードなどはサンプルです。このコードをそのまま実行するとエラーになりますので、ご利用の環境に合わせてサーバー名やアカウント、パスワードなどを適切に設定してください。
Sub Sample1() Dim FTP, rc As Long, Server As String, User As String, Pass As String Dim Target As String, Folder As String Set FTP = CreateObject("basp21.FTP") ''FTPオブジェクト Server = "ftp.xxxxx.com" ''ホストアドレス User = "toru_tanaka" ''ユーザー名 Pass = "password" ''パスワード Target = Application.GetOpenFilename() ''送信ファイル If Target = "False" Then Exit Sub Folder = "test/sub" ''送信フォルダ rc = FTP.Connect(Server, User, Pass) If rc <> 0 Then MsgBox "FTP接続できませんでした。", vbCritical FTP.Close Exit Sub End If rc = FTP.PutFile(Target, Folder) If rc <> 1 Then MsgBox Dir(Target) & "を送信できませんでした。", vbCritical FTP.Close Exit Sub End If MsgBox Dir(Target) & "を送信しました。", vbInformation FTP.Close End Sub
【注意】
・FTPサーバーによっては、全角のファイル名が使えないところもあります。お気を付けください。
・送信先のフォルダ(上ではtest/sub)は、あらかじめ作成されていないとエラーになります。
・送信しようとしたファイルと同名のファイルがすでに存在する場合は上書きされます。
・FTPではサーバーとローカルマシンの間で通信が行われます。ファイアーウォールなどが稼働していると、正常に機能しないことがあります。たとえばWindows XPのファイアーウォールで、Excelでの通信を例外として登録していないと次のようなアラートが表示されます。
このアラートが表示されたときは[ブロックを解除する]ボタンをクリックしてください。[ブロックする]ボタンをクリックすると、BASP21の処理が終わらず、マクロが操作不能になることがあります。そんなときはExcelを強制終了するしかありませんので、くれぐれもお気を付けください。
FTPサーバーからローカルマシンにファイルを受信するには、GetFileメソッドを使います。GetFileメソッドの構文は次の通りです。
rc = ftp.GetFile(Remote,Local[,Type])
引数Remoteには送信元(FTPサーバー側)のファイルを指定します。たとえば、ftp.xxxxx.com/test/sub/sample.datの場合は「test/sub/sample.dat」となります。
引数Localには受信する(ローカル側の)フォルダを指定します。
引数Typeは省略可能です。受信するデータの形式を指定します。省略するとテキストファイル(ASCII)が指定されたものとします。
次のサンプルは「ftp.xxxxx.com/test/sub/sample.dat」を受信してローカルマシンに保存します。保存するフォルダは、ブックが存在するフォルダ内の「data」フォルダです。
Sub Sample2() Dim FTP, rc As Long, Server As String, User As String, Pass As String Dim Target As String, Folder As String Set FTP = CreateObject("basp21.FTP") ''FTPオブジェクト Server = "ftp.xxxxx.com" ''ホストアドレス User = "toru_tanaka" ''ユーザー名 Pass = "password" ''パスワード Folder = ThisWorkbook.Path & "\data" ''保存先フォルダ Target = "test/sub/sample.dat" ''対象のファイル名 rc = FTP.Connect(Server, User, Pass) If rc <> 0 Then MsgBox "FTP接続出来ませんでした。", vbCritical FTP.Close Exit Sub End If rc = FTP.GetFile(Target, Folder) If rc <> 1 Then MsgBox "ファイルを受信できませんでした。", vbCritical FTP.Close Exit Sub End If MsgBox "ファイルを受信しました。", vbInformation FTP.Close End Sub