
現在、Excel VBAでcsvデータを作り出し、それをFTPソフトでFTPサーバにアップロードする作業をしています。
このアップロード作業もExcelでやることで自動化しようと考え、Windows標準のFTPを使ってアップロードするようにしてみましたが、ファイルはアップロードされるものの、サーバ上では0バイトになります。
(コマンドプロンプト表示でput後、successfulが出たまま止まってしまいます。asciiモードでも同じ。)
Dim strPNAME As String
Dim nFNO As Integer
strPNAME = ThisWorkbook.Path & "\ftptest.txt" 'ファイル名作成
nFNO = FreeFile '空いてるファイル番号を取る
Open strPNAME For Output As #nFNO 'ファイルを新規作成
'データ書き込み
Print #nFNO, "open ftp.**********" 'openホスト名
Print #nFNO, "user *** ++++" 'userコマンド ユーザー名 パスワード
'Print #nFNO, "quote PASV"
Print #nFNO, "binary"
Print #nFNO, "put " & ThisWorkbook.Path & "\data_spy.csv"
'Print #nFNO, "put quantity.csv"
Print #nFNO, "bye"
Close #nFNO
Shell "ftp -n -s:" & strPNAME
次に、BASP21を使ってみましたが同じ結果になりました。
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.************" ''ホストアドレス
User = "**********" ''ユーザー名
Pass = "+++++++" ''パスワード
Target = "data_spy.csv" ''送信ファイル
'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, "")
If rc <> 1 Then
MsgBox Dir(Target) & "を送信できませんでした。", vbCritical
Text = FTP.GetReply()
MsgBox Text
FTP.Close
Exit Sub
End If
MsgBox Dir(Target) & "を送信しました。", vbInformation
FTP.Close
そこで、単純なFTPバッチファイルを作ってそれを実行させてみましたが結果は同じです。
url接続(でいいのでしょうか ftp://***:+++@>>>>>)では、フォルダが開いたのでそこにファイルをいれてみたところ、正常にアップロードできていました。
FTPソフト、url接続 → 成功
VBA、バッチファイル → 失敗、0バイト
接続先はyahooショッピングのftpサーバ、当方の環境はWindows7pro+Excel2013です。
セキュリティソフトの終了、ファイアウォールのファイル転送許可などもチェックしました。
原因がわかる方おられませんでしょうか。
よろしくお願い致します。
No.4ベストアンサー
- 回答日時:
ANo.1です。
パッシブモードの問題かもしれません。Windowsのftp.exeはパッシブモードに対応していません。quote PASVを行っても意味はないようです。
クライアントがルータ環境内からインターネットに接続している場合だと基本パッシブモードでないとftpでファイル転送セッションが開けないのでファイル転送できません。
コマンドライン実行にはftp.exe以外のftpクライアントが必要です。
IEのftp機能(url指定の場合はおそらくこちらが使われる)はパッシブモードに対応しているので使えるようです。
なお、basp21.FTPの方はネットで調べたところCommandの中にpasvのいうpassiveモードに切り換えるコマンドがあるので、これを使えば上手くいくかもしれません。
# http://www.hi-ho.ne.jp/babaq/basp21f.html
ご回答ありがとうございます。
basp21.FTPにpasvモードへの変更を追加したところ、正常にput出来ました!
大変感謝しております。
rinkun様、tatsu99様、ご回答頂きありがとうございました。

No.3
- 回答日時:
No2です。
>コマンドプロンプト表示でput後、successfulが出たまま止まってしまいます。asciiモードでも同じ。
ということは、コマンドプロンプトでも確かめられたということですね。No2は無視してください。
ご回答ありがとうございます。
念のため、No2でご指摘頂いた点を再確認しました。
1~3)は特に問題なく、4)の結果もsuccessfulで止まってしまいました。
ファイルも同様に空ファイルです。
他にお気づきの点がありましたら、ご教示頂ければ幸いです。

No.2
- 回答日時:
こちらで、同じようにexcelから呼び出す方法を実行してみました。
正しく、転送されています。
コマンドプロンプトでいかのことを確認されてはいかがでしょうか。
1)当該excelファイルのディレクトリに移動(ftptest.txtのあるディレクトリ)
2)type ftptest.txtでftptest.txtの内容を確認
3)type data_spy.csvでdata_spy.csvの内容を確認(内容があること。サイズが0でないこと)
4)ftp -n -s:c:\xxx\yyyy\ftptest.txt でftpを実行(c:\xxx\yyyは移動したこのディレクトリとします)
1)2)3)は直ちに確認できます。それがあっていれば、4)のときにエラーメッセージが表示されるはずです。
それが手掛かりになるかと。(例えばセキュリティでポートがブロックされているなどの場合)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
サーバーに転送したファイルが0kbになってしまうのは、なぜ??
その他(パソコン・スマホ・電化製品)
-
ffftpでファイル取得が0バイトになります
Microsoft ASP
-
FTPエラー425
その他(コンピューター・テクノロジー)
-
-
4
rftpでputできない
その他(OS)
-
5
コマンドでのFTP転送が進まない。
その他(コンピューター・テクノロジー)
-
6
FTPで書き込み中のファイルの完了を知りたい
C言語・C++・C#
-
7
FTPで存在しないファイルをGETしたときの動作について
その他(コンピューター・テクノロジー)
-
8
FTPでPUTできない原因は何?
Mac OS
-
9
シェルスクリプトでFTPの実行結果を取得するには
その他(プログラミング・Web制作)
-
10
VBAでFTPファイル転送がうまくいかない
Visual Basic(VBA)
-
11
ftpでアップロードが出来ない
Visual Basic(VBA)
-
12
ftpサーバー 接続できない
Windows 10
-
13
教えてください。FTPアップロードが出来なくなりました。
Visual Basic(VBA)
-
14
FTPでエクセルをPUTするとファイルが破損する
Visual Basic(VBA)
-
15
WindowsのエクスプローラーでFTPサーバーに接続できない
サーバー
-
16
ftpのmgetコマンドの自分の格納場所の指定方法は?
Windows Me・NT・2000
-
17
FTPコマンドでディレクトリごとファイル移動できるコマンドはありますか?
その他(プログラミング・Web制作)
-
18
renameコマンドについて
その他(プログラミング・Web制作)
-
19
ftp処理でmove(移動)を行いたい
その他(プログラミング・Web制作)
-
20
ftpコマンドの戻り値をチェックしたい
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
プログラミングを学べる!?進化している子どものおもちゃについて専門家に聞いた!
プログラミングを学べるレゴブロックがあることはご存知だろうか。レゴに限らず最近のおもちゃには、プログラミングの要素がどんどん取り入れられているようだ。「教えて!goo」にも、「プログラミングを学べる子供...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どんなプログラムを書いても指...
-
FTPでputすると空ファイルが出...
-
フルパスから最後のディレクト...
-
ファイルやディレクトリの存在...
-
絶対パスの絶対て英語で何でし...
-
ExcelVBAでカレントディレクト...
-
「UNCパスはサポートされません...
-
新規作成ファイルパスが有効か...
-
windows.hがincludeされない
-
C言語でファイルを読み込みたい
-
ネットワーク上のコンピュータ...
-
セルに入力されたパスでフォル...
-
ファイルのパスを動的に取得
-
fopenで別ディレクトリにファイ...
-
Access クエリ実行が急に非常に...
-
C言語初心者の質問失礼します。
-
バッファとは何ですか
-
OLE又はDDEを使うVISUAL BESIC...
-
エラーの原因は?「この関数の...
-
ファイル名の先頭にアンダース...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どんなプログラムを書いても指...
-
FTPでputすると空ファイルが出...
-
フルパスから最後のディレクト...
-
fopenで別ディレクトリにファイ...
-
「UNCパスはサポートされません...
-
webアプリケーションでの画像フ...
-
絶対パスの絶対て英語で何でし...
-
ExcelVBAでカレントディレクト...
-
windows.hがincludeされない
-
ExcelVBA サーバーの(共有フォ...
-
ファイルやディレクトリの存在...
-
セルに入力されたパスでフォル...
-
C言語を用いたファイルの一括削...
-
ネットワーク上のコンピュータ...
-
Ubuntu テキストファイルをどこ...
-
GIFファイルを一括してWORDに挿...
-
GetPrivateProfileStringでini...
-
Excelマクロからのバイナリデー...
-
FindFirstFileについて
-
圧縮(Zip)について
おすすめ情報