質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

20317閲覧

FTPコマンドでthe system cannot find the path specified が表示されます

alice

総合スコア34

FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2015/03/09 02:55

以下のコード(部分抽出)でマクロを実行しておりますが表題の英文のエラーが出てきます。
間違った箇所が分かる方、いらっしゃればお教えいただけませんでしょうか。
やりたい作業としては、特定のディレクトリにあるフォルダ、ファイルをそれぞれFTPサーバーに同期したく、そのように下記コードを作成したつもりです。
targetDir,vbDirectory変数はそれぞれFTP送付元のパス、FTP送付先のパスを指定していれております。(string型)です。

buf = Dir(targetDir, vbDirectory)
Do While buf <> ""

If buf = "." Or buf = ".." Then GoTo Continue End If ' ディレクトリチェック If GetAttr(targetDir & buf) And vbDirectory Then isDir = True ' 送信先ディレクトリ名の作成 ftpPath = ftpRootDir & buf '& "/" ' ディレクトリに対してFTP処理 rc2 = FTP.Command("MKD " & ftpPath & "/") MsgBox FTP.GetReply() Else isDir = False ' 送信先ファイル名の作成 ftpPath = ftpRootDir & buf ' FTPでファイル送信 rc = FTP.PutFile(targetDir, ftpPath) <> "" End If

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

とりあえず現場の方の力をお借りする形で、なんとか解決いたしました。
Guuさん、いつも本当にありがとうございます。
後ほど、自己解決したコードについて、編集します。

投稿2015/03/10 00:35

alice

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Guu

2015/03/10 01:26

新たなコードをちょっと見ましたが、まだおかしい部分が沢山あります。 これからサンプルコードを書こうと思っておりましたが、解決したとのことなので取りやめます。 必要あれば申し出てください。時間が空けばサンプルコードを書きます
alice

2015/03/10 02:49

Guuさん...本当にありがとうございます... 今後の参考にさせていただきたいので、できればお伺いしてもよろしいでしょうか...? 勿論お手隙の時があれば、です。いつでもお待ちしております。
guest

0

迅速にご回答くださりありがとうございました。
こちらのコードなんですが、ご指摘いただいた箇所に関して修正いたしましたが、
私自身の知識不足により、十分な修正ができないままでおります。
お手数おかけして誠に恐縮です。
お時間をとらせてしまうのが誠に申し訳ないので、こちらでも引き続き考え努力する所存です。
vbDirectoryにつきまして対応、修正いたしました。

buf = Dir(targetDir, vbDirectory) Do While buf <> "" If buf = "." Or buf = ".." Then GoTo Continue End If ' ディレクトリチェック If GetAttr(targetDir & buf) = vbDirectory Then isDir = Tru 'ディレクトリ名作成 ftpPath = targetbuf & buf rc2 = FTP.Command("MKD " & ftpPath) Help = FTP.GetReply() ' ディレクトリに対してFTP処理 'FTP

Else
isDir = False
ftpPath = "/" & ftpPath
rc = FTP.PutFile(targetDir, ftpPath) <> ""
' FTPでファイル送信
End If
If isDir Then
msg = msg & buf & "(ディレクトリ)" & vbCrLf
Else
msg = msg & buf & vbCrLf
End If
Continue:
buf = Dir()
Loop
MsgBox msg

投稿2015/03/09 10:08

編集2015/03/09 10:37
alice

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ftpPathの中身を確認してみてはどうでしょうか?
FTP.Command("MKD " & ftpPath & "/") となっていますが、それより前でftpPath = ftpRootDir & buf '& "/" となっていますので、末尾は//です。
いずれにせよパスの問題なので、パスを一つ一つ確認することをお勧めします

投稿2015/03/09 03:01

Guu

総合スコア142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

alice

2015/03/09 04:12

早速ご回答くださりありがとうございます。 説明が抜けており、申し訳ございませんでした。 「’」はコメントで ftpPath = ftpRootDir & buf '& "/" の部分の「 '& "/"」は コメントアウトしております。 抜けており申し訳ないです。
Guu

2015/03/09 05:15

なるほど。確かにコメントアウトしていますね。気がつきませんでした。 責任をとってコードにつきあいたいと思います。 で、さっそく細かく見ていこうと思ったらいくつかおかしい点を発見 1.>targetDir,vbDirectory変数はそれぞれFTP送付元のパス、FTP送付先のパスを指定していれております。(string型)です。 vbDirectoryはシステム定数ですね 変数として扱えない筈ですので、「FTP送付先のパスを指定」は誤りだと思います 2.GetAttr(targetDir & buf) は中身が同じ転送元フォルダが2つ並んでいることになります。 やりたいことは判るのでとりあえずbufをぬかして進みますと If GetAttr(targetDir & buf) And vbDirectory Then が出てきますが、中身がデイレクトリかどうかチェックしたいのなら Andはおかしいですね = が正解だと思います。 If GetAttr(targetDir & buf) =vbDirectory Then それとループ構造が不健全なのでコピペミスだと思いますが、targetDirの指定次第では無限ループですよ まずこの辺を全部直して、どの時点でエラーが出たのか教えてください。 またデイレクトリやファイルの取得やチェックはFilesysytemObjectを利用した方が判りやすいかもしれません。
alice

2015/03/09 10:38

迅速にご回答くださりありがとうございました。 こちらのコードなんですが、ご指摘いただいた箇所に関して修正いたしましたが、 私自身の知識不足により、十分な修正ができないままでおります。 お手数おかけして誠に恐縮です。 お時間をとらせてしまうのが誠に申し訳ないので、こちらでも引き続き考え努力する所存です。 vbDirectoryにつきまして対応、修正いたしました。 buf = Dir(targetDir, vbDirectory) Do While buf <> "" If buf = "." Or buf = ".." Then GoTo Continue End If ' ディレクトリチェック If GetAttr(targetDir & buf) = vbDirectory Then isDir = Tru 'ディレクトリ名作成 ftpPath = targetbuf & buf rc2 = FTP.Command("MKD " & ftpPath) Help = FTP.GetReply() ' ディレクトリに対してFTP処理 'FTP Else isDir = False ftpPath = "/" & ftpPath rc = FTP.PutFile(targetDir, ftpPath) <> "" ' FTPでファイル送信 End If If isDir Then msg = msg & buf & "(ディレクトリ)" & vbCrLf Else msg = msg & buf & vbCrLf End If Continue: buf = Dir() Loop MsgBox msg
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問