
現在、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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
このQ&Aを見た人はこんなQ&Aも見ています
-
サーバーに転送したファイルが0kbになってしまうのは、なぜ??
その他(パソコン・スマホ・電化製品)
-
FTPエラー425
その他(コンピューター・テクノロジー)
-
ffftpでファイル取得が0バイトになります
Microsoft ASP
-
-
4
rftpでputできない
その他(OS)
-
5
コマンドでのFTP転送が進まない。
その他(コンピューター・テクノロジー)
-
6
FTPで存在しないファイルをGETしたときの動作について
その他(コンピューター・テクノロジー)
-
7
FTPで書き込み中のファイルの完了を知りたい
C言語・C++・C#
-
8
ftpサーバー 接続できない
Windows 10
-
9
FTPでPUTできない原因は何?
Mac OS
-
10
シェルスクリプトでFTPの実行結果を取得するには
その他(プログラミング・Web制作)
-
11
VBAでFTPファイル転送がうまくいかない
Visual Basic(VBA)
-
12
ftpでアップロードが出来ない
Visual Basic(VBA)
-
13
ftpのmgetコマンドの自分の格納場所の指定方法は?
Windows Me・NT・2000
-
14
FTPのPUT、GETについて
その他(コンピューター・テクノロジー)
-
15
vsftpd 大量転送で時たま途中でエラー
モニター・ディスプレイ
-
16
FTPでエクセルをPUTするとファイルが破損する
Visual Basic(VBA)
-
17
WindowsのエクスプローラーでFTPサーバーに接続できない
サーバー
-
18
コマンドプロンプトでftpで接続したのですが
iOS
-
19
勝手にファイルザイズが0バイトになってしまう
セキュリティホール・脆弱性
-
20
ftp処理でmove(移動)を行いたい
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
プログラミングを学べる!?進化している子どものおもちゃについて専門家に聞いた!
プログラミングを学べるレゴブロックがあることはご存知だろうか。レゴに限らず最近のおもちゃには、プログラミングの要素がどんどん取り入れられているようだ。「教えて!goo」にも、「プログラミングを学べる子供...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どんなプログラムを書いても指...
-
FTPでputすると空ファイルが出...
-
優しい言葉で教えて下さい。
-
ファイルやディレクトリの存在...
-
fopenで別ディレクトリにファイ...
-
フルパスから最後のディレクト...
-
webアプリケーションでの画像フ...
-
最下層のファイルまで取得する
-
セルに入力されたパスでフォル...
-
VBでフォルダ単位のFTP
-
絶対パスの絶対て英語で何でし...
-
エクセルVBAで相対パスでファイ...
-
GetPrivateProfileStringでini...
-
ShellExecute、エクスプローラ...
-
ExcelVBAでカレントディレクト...
-
「UNCパスはサポートされません...
-
#include fileを絶対パスで指定...
-
圧縮(Zip)について
-
C++Builder 6のOpenDialogでフ...
-
MATLABのsaveでファイル名を試...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どんなプログラムを書いても指...
-
フルパスから最後のディレクト...
-
「UNCパスはサポートされません...
-
FTPでputすると空ファイルが出...
-
絶対パスの絶対て英語で何でし...
-
fopenで別ディレクトリにファイ...
-
ExcelVBAでカレントディレクト...
-
ファイルやディレクトリの存在...
-
windows.hがincludeされない
-
セルに入力されたパスでフォル...
-
ネットワーク上のコンピュータ...
-
Ubuntu テキストファイルをどこ...
-
C言語を用いたファイルの一括削...
-
webアプリケーションでの画像フ...
-
新規作成ファイルパスが有効か...
-
ファイルダイアログのカレント...
-
ExcelVBA サーバーの(共有フォ...
-
GetPrivateProfileStringでini...
-
エクセルVBAで相対パスでファイ...
-
マイクラでPythonのプログラミ...
おすすめ情報