
忍者へFTP接続でVBAでファイルをアップロードしたいです。
http://officetanaka.net/excel/vba/tips/tips47.htm
を参考に実践してるのですがうまくできません。
FFFTPを使っての手動でのアップロードは問題なく行えます。
-----------------------------------------------------------------
Sub Sample1()
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.xxxxx.com" ''ホストアドレス
User = "toru_tanaka" ''ユーザー名
Pass = "password" ''パスワード
Target = Application.GetOpenFilename() ''送信ファイル
If Target = "False" Then Exit Sub
Folder = "/" ''送信フォルダ
rc = FTP.Connect(Server, User, Pass)
If rc <> 0 Then
MsgBox "FTP接続できませんでした。", vbCritical
FTP.Close
Exit Sub
End If
rc = FTP.PutFile(Target, Folder)
If rc <> 1 Then
MsgBox Dir(Target) & "を送信できませんでした。", vbCritical
FTP.Close
Exit Sub
End If
MsgBox Dir(Target) & "を送信しました。", vbInformation
FTP.Close
End Sub
-----------------------------------------------------------------
の
rc = FTP.Connect(Server, User, Pass)
If rc <> 0 Then
MsgBox "FTP接続できませんでした。", vbCritical
FTP.Close
Exit Sub
End If
これは通過できるのですが、
rc = FTP.PutFile(Target, Folder)
If rc <> 1 Then
MsgBox Dir(Target) & "を送信できませんでした。", vbCritical
FTP.Close
Exit Sub
End If
で0が返るようで、送信できませんでした。となります。
トップページの階層にアップしたい場合は
Folder = "/"
でいいんですよね?
Folder = "/" にしても
Folder = ""にしても失敗します。
FFFTPのメッセージランを見ていると、
VBAで送信できなくても
-----------------------------------------------------------------
>TYPE A
200 転送タイプを A にセットしました
>PASV
227 Entering Passive Mode (***).
ダウンロードのためにホスト *** (***) に接続しています. (TCP/IPv4)
接続しました. (TCP/IPv4)
>MLSD
150 ASCIIモードのデータ接続をオープンします MLSD
226 転送が完了しました
ファイル一覧の取得は正常終了しました. (821 Bytes)
-----------------------------------------------------------------
が表示されます。
何が間違ってるのでしょうか?
ご教授よろしくお願いします。
No.2ベストアンサー
- 回答日時:
トップページの階層=/ ルートとは限りません。
指定したパスはルート指定です。もちろん、これは、UNIX系、Linux系のOSである場合ですが、まあ、FTP、HTTPサーバーであれば、解釈できるような事もおおいが。
FTP、HTTPなどは、公開用フォルダーを指定されています。その場合、そこがHOMEとなり、/ or c:\ ではないですね。FTPなどリモート操作は、ログインしてコネクションした場合、ログインしたユーザーのHOME又は、そのサービスが公開されているパスに導かれます。それで絶対してしまうと、アクセス不能な場所を指定しまうこともあります。
これはクライアントツールにもよるし、サーバー側のサービスにもよります。
例えば、ログインして呼び出された所を指定するならカレントを意味するドット
" . " -> ログインした時のフォルダーを指定したければ
” ./../” → HOMEの一つ上の階層が指定された事に。 ” ../ ”と同じ
を指定すれば、ほぼ動作は期待とおりになります。相対パス指定を試してみてください。””でフォルダー指定なしでも通じると思います。仕様が明確でないので、何ともいえませんが、””はリモートフォルダーを指定しなかった。という事だと思いますよ。第2引数が必須だと思われるので、””でHOME指定ということでしょう。
ただ、No1さんが指摘したように / or c:\ 直下や FTPサーバーのログインした時のHOME(ルート)は書き込み不可であることが多い。そこを確認してからですね。
なお、
>トップページの階層にアップしたい場合は
で意味は通じますが、このような操作の場合、HOMEの方が一般的かと。
この辺に例が
http://www.b21soft.co.jp/basp21/basp21pftp.html# …
rc = bftp.PutFile("c:\html\images\*","html/images",1) ' バイナリファイルの送信
ここでは"html/images"と絶対パス指定になっていません。これを"/html/images" とすると同じようになるでしょうね。
No.1
- 回答日時:
検証ができないので、はっきりとは言えないけど
>トップページの階層にアップしたい場合は
>Folder = "/"
>でいいんですよね?
取り敢えずこれは違うと思う
質問文中に掲載されたサイトによると
---
PutFileメソッドの構文は
rc = ftp.PutFile(Local,Remote[,Type])
引数Remoteを空欄にするとルートフォルダに保存されます。たとえば、ftp.xxxxx.com/test/subの場合は「test/sub」のように指定します。
---
ルートフォルダに保存する場合は
Folder = ""
ですが、ルートフォルダ(ftp.xxxxx.com)への書き込みは許可されているのでしょうか?
一般的なHPスペースの場合、ルートフォルダー内の public_htmlフォルダとかdataフォルダへのアクセスになるとおもうのですが
Folder = "public_html"
Folder = "data"
のような形式だとうまくいきませんか?
後はアップロードするファイル名が日本語表記の場合なども失敗します
Folder = "public_html"
Folder = "data"
もダメでした。
ルートフォルダ(ftp.xxxxx.com)への書き込みが許可されてるかどうかわからないので
まずそこから確認してみます。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- 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) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) VBA初心者です。 2 2022/10/10 11:52
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
絶対パスのルートをサブディレ...
-
直リンク禁止
-
全く同じファイルなのにホーム...
-
JSPと異なるディレクトリのファ...
-
[URL] "*/index.cgi" を "*/" ...
-
URLに「.html」の拡張子がなく...
-
XREA使用で作成したHTMLファイ...
-
1つのドメインHP内に2つ<inde...
-
複数のindex.htmlについて
-
1つ下の階層のフォルダに相対...
-
リンク先に日本語フォルダがあ...
-
HTMLからフォルダを開きたい
-
Excelで、社外秘(閲覧のみ)と...
-
ソースの追加行数と変更行数
-
iPadの標準ブラウザでローカルH...
-
リンク先からリンク元の、同じ...
-
テキストエディタvscodeでプロ...
-
どのページもすべて同じURLなの...
-
htmlファイルの表示が真っ白
-
Webサイトから、txtファイルを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
リンク先に日本語フォルダがあ...
-
URLに「.html」の拡張子がなく...
-
複数のindex.htmlを作ってもい...
-
1つ下の階層のフォルダに相対...
-
XREA使用で作成したHTMLファイ...
-
htmlでリンクに勝手にindex.htm...
-
URLの日付について
-
サーバー内のフォルダにある写...
-
CDで自動再生する為には
-
ホームページを作成したら、フ...
-
フォルダ内の最初のファイル名...
-
被リンクの全くないWEBページを...
-
indexをつけないとどうなる?
-
絶対パスのルートをサブディレ...
-
.htmと.htmlの違い
-
フォルダにはダミーでもindex.h...
-
webサイトの「index」を非表示...
-
index.htmlファイルはどこに?
-
[URL] "*/index.cgi" を "*/" ...
-
相対パスについて
おすすめ情報