VBAでFTP転送する方法

VBAでFTP転送する方法

Posted at May 13,2014 1:55 AM
Tag:[Excel, VBA]

VBAでFTP転送する方法を紹介します。

1.はじめに

仕事で、VBAで出力したファイルをFTPで転送する必要が生じました。

これまではExcel VBAを使って一旦出力したファイルを別のスクリプトなどでFTP転送していましたが、そのまま転送できないか調べたところ、VBAを使ってFTP転送する方法がありました。

ということで、VBAでFTP転送する方法を紹介します。

2.BASP21.dllのダウンロード・インストール

VBAでFTP転送するにはBASP21.dllが必要です。

BASP21は、VBScriptやVisual Basic、VBAなどから使える汎用のコンポーネントで、FTP以外にも豊富な機能を有しています。

BASP21 DLL
BASP21 DLL

BASP21のページにアクセスして、ページにある「Down Load! BASP21-2003-0211.exe (1.44MB) 」のリンクをクリック。

ダウンロード

ダウンロードしたexeファイルを実行します。

使用許諾契約が表示されるので「はい」をクリック。

使用許諾契約

インストールが開始します。

インストール

インストールが開始したら「完了」をクリック。

インストール完了

3.VBAを使ったFTP

VBAでFTPを行うには、以下のコードを実装します。

Sub test()
    Dim ftp
    Dim rc As Long
    Dim host As String
    Dim user As String
    Dim pass As String
    Dim file As String
    Dim dest As String
 
    Set ftp = CreateObject("basp21.FTP")
    host = "ホストアドレス"
    user = "ユーザー名"
    pass = "パスワード"
    dest = "送信先ディレクトリ"
 
    rc = ftp.Connect(host, user, pass)
    If rc <> 0 Then
        MsgBox "接続NG"
        ftp.Close
        Exit Sub
    End If
 
    ftp.Command ("pasv")
 
    file = Application.GetOpenFilename() '送信ファイル
    rc = ftp.PutFile(file, dest)
    If rc <> 1 Then
        MsgBox "転送NG"
        ftp.Close
        Exit Sub
    End If
 
    MsgBox "転送OK"
    ftp.Close
End Sub

以下、コードの簡単な説明です。

まず、CreateObjectメソッドで"basp21.FTP"というオブジェクトを作成します。

    Set ftp = CreateObject("basp21.FTP")

FTP接続情報(ホストアドレス・ユーザー名・パスワード・送信ファイル・送信先ディレクトリ)を設定します。Application.GetOpenFilename()でファイル選択ダイアログが開きます。

    host = "ホストアドレス"
    user = "ユーザー名"
    pass = "パスワード"
    dest = "送信先ディレクトリ"

送信先ディレクトリを空にしておけばカレントディレクトリに送信されます。パスを指定する場合はカレントディレクトリからの相対パス指定のようです。

    dest = "test/" 'OK

次のようにルートからの絶対パスを設定するとNGになるので気をつけてください。

    dest = "/home/hoge/test/" 'NG

ConnectでFTPサーバに接続します。rcに0が返却されればOKです。

    rc = ftp.Connect(host, user, pass)

必要に応じてPASVモードにします。

    ftp.Command ("pasv")

PutFileでFTPサーバにファイルを転送します。rcには送信したファイル数が返却されます。1ファイル送信した場合、1が返却されればOKです。

    file = Application.GetOpenFilename() '送信ファイル
    rc = ftp.PutFile(file, Folder)

CloseでFTP接続を切断します。

    ftp.Close

Windowsのファイアウォールの設定によっては、下記のようなメッセージが表示されるので、「ブロックを解除する」をクリックしてください。

インストール完了

4.MKDについて

BASP21では、以下のコマンドでリモート側のディレクトリを作成することができます。

    ftp.Command ("MKD " & ディレクトリのフルパス)

ただし同時に作成できるディレクトリは1階層のみのようです。

たとえば、/home/hogeという既存のディレクトリがある場合、

    ftp.Command ("MKD /home/hoge/foo/bar/")

とするとNGになるようなので、

    ftp.Command ("MKD /home/hoge/foo/")
    ftp.Command ("MKD /home/hoge/foo/bar/")

という風に1階層ずつ作成してみてください。

コマンドの詳細や上記以外のコマンドについては下記のページで詳しく解説されています。

BASP21 FTPオブジェクト

2014.05.21
4項を追加しました。

関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)