現在、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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
サーバーに転送したファイルが0kbになってしまうのは、なぜ??
その他(パソコン・スマホ・電化製品)
-
FTPエラー425
その他(コンピューター・テクノロジー)
-
ffftpでファイル取得が0バイトになります
Microsoft ASP
-
-
4
コマンドでのFTP転送が進まない。
その他(コンピューター・テクノロジー)
-
5
rftpでputできない
その他(OS)
-
6
ftpコマンドを実行すると「425 Can't open connection」とエラーが出ます。
その他(コンピューター・テクノロジー)
-
7
FTPでPUTできない原因は何?
Mac OS
-
8
FTPの送信結果を検知したい
その他(プログラミング・Web制作)
-
9
ftpサーバー 接続できない
Windows 10
-
10
ftpでアップロードが出来ない
Visual Basic(VBA)
-
11
FTPで書き込み中のファイルの完了を知りたい
C言語・C++・C#
-
12
FTPで存在しないファイルをGETしたときの動作について
その他(コンピューター・テクノロジー)
-
13
勝手にファイルザイズが0バイトになってしまう
セキュリティホール・脆弱性
-
14
VBAでFTPファイル転送がうまくいかない
Visual Basic(VBA)
-
15
ftpのmgetコマンドの自分の格納場所の指定方法は?
Windows Me・NT・2000
-
16
FTPClientで転送結果(OKかFAIL)
Java
-
17
FTPサーバーの構築について
サーバー
-
18
TCP環境下でのファイル破損は起こるのか?
その他(コンピューター・テクノロジー)
-
19
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
20
EBCDIC⇒SJIS変換の方法
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どんなプログラムを書いても指...
-
フルパスから最後のディレクト...
-
FTPでputすると空ファイルが出...
-
windows.hがincludeされない
-
C言語を用いたファイルの一括削...
-
ExcelVBAでカレントディレクト...
-
「UNCパスはサポートされません...
-
GetPrivateProfileStringでini...
-
fopenで別ディレクトリにファイ...
-
webアプリケーションでの画像フ...
-
ExcelVBA サーバーの(共有フォ...
-
VBAでサブフォルダ内の写真サイ...
-
セルに入力されたパスでフォル...
-
VBでフォルダ単位のFTP
-
絶対パスの絶対て英語で何でし...
-
ファイルやディレクトリの存在...
-
C#でカレントディレクトリの取...
-
圧縮(Zip)について
-
VBAで自身のファイル名を取得す...
-
ShellExecute、エクスプローラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フルパスから最後のディレクト...
-
FTPでputすると空ファイルが出...
-
どんなプログラムを書いても指...
-
ExcelVBAでカレントディレクト...
-
マイクラでPythonのプログラミ...
-
windows.hがincludeされない
-
「UNCパスはサポートされません...
-
ファイルやディレクトリの存在...
-
ネットワーク上のコンピュータ...
-
C言語を用いたファイルの一括削...
-
fopenで別ディレクトリにファイ...
-
GetPrivateProfileStringでini...
-
ExcelVBA サーバーの(共有フォ...
-
絶対パスの絶対て英語で何でし...
-
FTPでリモートのファイル一覧取得
-
webアプリケーションでの画像フ...
-
ファイルダイアログのカレント...
-
VBAで自身のファイル名を取得す...
-
AfxLoadLibrary関数で、DLLのハ...
-
Ubuntu テキストファイルをどこ...
おすすめ情報