VBAでFTPサーバーへのアップデートができない問題

このQ&Aのポイント
  • BASP21を使用してFTPサーバーへのアップデートができない問題が発生しています。
  • サーバーのユーザー名やパスワードは正しい状態であり、FTP接続もできていますが、アップデートする際に「を送信できませんでした。」というエラーメッセージが表示され、アップデートができません。
  • 他の原因を探す必要がありますが、初心者ですので分かりません。どなたか解決方法を教えていただけないでしょうか?
回答を見る
  • ベストアンサー

VBAでFTPサーバーへのアップデート

BASP21でのFTPサーバーへのアップデートが出来ないです。 BASP21をインストールし、サーバーのユーザー名やパスワードも あっている状態です。 しかし、アップデートすると 「を送信できませんでした。」 と表示され、アップデートできませんでした。 「FTP接続できませんでした。」は抜けているので、 それ以外が原因だとは思うのですが分かりません。 Visual Basicのサンプルから書きました。 以下の通りです。 初心者のため質問に不備があるかもしれません。 予めお許しください。 Sub FTPサーバーにUP() 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.●●●●●●.jp" ''ホストアドレス User = "●●●●●●" ''ユーザー名 Pass = "●●●●●●●●" ''パスワード Target = "C:\Users\●●\Desktop.エクセルファイル.xls" ''送信ファイル If Target = "False" Then Exit Sub Folder = "/home/●●●●●●/●●●●/●●●/状況" 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

  • ODEX
  • お礼率66% (63/95)

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

>ウィルスバスターの鉄壁ガードに穴を空けることが出来ませんでした。 # FTPサーバ名[:ポート番号][:タイムアウト][ファイアーウォール]。":" で区切ってポート番号(省略値21)とタイムアウト値(秒単位、省略値120)を指定できます。 # rc = ftp.Connect("ftp.microsoft.com:21:120","anonymous","who@who.com") http://www.hi-ho.ne.jp/babaq/basp21f.html BASP21 FTPは、ポート21なんていう所を使っているようですね。 その21を25にしてあげれば、標準で通るはずです。 今、私自身のファイヤーウォールを確認してみましたが、25は、あっても、21は通常入れていないから、やっぱりブロックしてしまうようですね。

ODEX
質問者

お礼

何度もありがとうございました。 師走で忙しく、まだ試せていないです。 教えていただいたのに申し訳ございません。 試してからベストアンサーに設定いたします。

ODEX
質問者

補足

申し訳ございません。 ポート番号を25に変更すると 自分で作成したメッセージ、 「FTP接続できませんでした。」 となってしまいました。 と言うことでファイヤーウォールが問題ではないのかもしれません。 何度もお答えいただいてありがとうございます。 参考(というよりそのまま抜粋してしまったのですが)にしたのは http://officetanaka.net/excel/vba/tips/tips47.htm です。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

VB カテゴリではレスがつかなかったようですね。 いくつか気になる点を指摘しておきます。 >Target = "C:\Users\●●\Desktop.エクセルファイル.xls" ''送信ファイル >If Target = "False" Then Exit Sub ここは、 Target = "C:\Users\●●\Desktop.エクセルファイル.xls" ''送信ファイル If Dir(Target) ="" Then Exit Sub >rc = FTP.PutFile(Target, Folder) ←テキスト送信です。 Excelファイルは、バイナリですから、 rc = FTP.PutFile(Target, Folder,1 )'三番目の引数のタイプは、1 になります。 なお、ファイヤーウォールは、開けておいてください。

ODEX
質問者

お礼

御礼が遅くなってしまい大変申し訳ございません。 ファイヤーウォールが原因のようで、 ウィルスバスターの鉄壁ガードに穴を空けることが出来ませんでした。 もう少し勉強してみます。

関連するQ&A

  • 忍者へFTP接続でVBAでファイルをアップロード

    忍者へ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) ----------------------------------------------------------------- が表示されます。 何が間違ってるのでしょうか? ご教授よろしくお願いします。

  • VBAで画像のアップロードをした時だけ

    以前こちらに質問した者ですが http://oshiete.coneco.net/qa8302218.html htmlファイルをvbaでFTPでアップロードすることは出来たのですが 画像がうまくアップロードできません。 Sub FTPで送る() Dim str送信ファイル As String str送信ファイル = MyDesktop & "\" & strSheetsName '送信ファイル Set FTP = CreateObject("basp21.FTP") With Sheets("メイン") Server = .Cells(.Cells.Find(What:="ホストアドレス", LookAt:=xlWhole).Row, 2) User = .Cells(.Cells.Find(What:="FC2_ID", LookAt:=xlWhole).Row, 2) Pass = .Cells(.Cells.Find(What:="FTPパスワード", LookAt:=xlWhole).Row, 2) End With Folder = "/" '送信フォルダ rc = FTP.Connect(Server, User, Pass) rc = FTP.PutFile(str送信ファイル, Folder) If rc <> 1 Then Debug.Print Dir(str送信ファイル) & "を送信できませんでした。" FTP.Close Exit Sub End If FTP.Close End Sub これで、拡張子がhtmlは問題なくアップロードできますが jpgはアップロードされますが、画像を開けません。 画像が空白になります。 FFFTPでアップロード済みの画像を開いてみようとすると、 「ファイルが破損しているか大きすぎる可能性があります」 となります。 VBAを使わずに手動で同じ画像をFFFTPでアップロードすると 問題なく画像が表示されます。 VBAで画像のアップロードをした時だけ画像が一応アップロードはされますが 表示されません。 なぜでしょうか? 再度ご教授いただければ助かります。 よろしくお願いします。

  • BASP21を使ってEXCELからメールの送信

    BASP21を使ってEXCELからメールの送信をしたいのですが、できません。 自分なりに調べた結果、下記のコードになったのですが、どこかおかしいのでしょうか? エラー表示は次になります。 530 5.7.1 client was not authenticated from メールアドレス よろしくお願いいたします。 Sub ボタン2_Click() ''[送信]ボタン Dim bobj, msg As String, i As Long Dim Server As String, Mailto As String, MailFrom As String Dim Subject As String, Attach As String, Body As String On Error Resume Next Set bobj = CreateObject("basp21") ''BASP21オブジェクト ''BASP21がインストールされているかどうかを判定する If Err = 429 Then MsgBox "BASP21がインストールされていません。", vbCritical Exit Sub End If ''必須データのチェック Server = "mail.○○○.com:587:60" ''SMTPサーバー Mailto = "○○○@hotmail.co.jp" ''宛先 MailFrom = "△△△@×××.co.jp" ''差出し人 Subject = "更新連絡" ''タイトル Body = "システムが更新しました" ''本文 msg = bobj.SendMail(Server, Mailto, MailFrom, Subject, Body, Attach) Set bobj = Nothing If msg <> "" Then MsgBox msg, vbExclamation Else MsgBox "メールを送信しました。", vbInformation End If End Sub

  • FTPサーバーからのファイルコピー

    勉強させてください。 vb2010.net win764bit FTPサーバーにアクセスし、FTPサーバーにあるCSVファイルをすべて 指定のフォルダにコピーしたいのです。 http://dobon.net/vb/dotnet/internet/ftpwebrequest.html#downloadfile を参考に作成しましたがうまくいきません。 1, Cドライブにコピーしたいのですが下記部分でアクセスに拒否されましたと  エラーが発生します。  Dim fs As New System.IO.FileStream( _ downFile, System.IO.FileMode.Create, System.IO.FileAccess.Write)  フォルダの設定をPrivate Const PATH_Folder = " C:\DATA"から  Private Const PATH_Folder = " \DATA"に変更するとサーバー上にアクセス(ファイルの書き込み)  が行われます。(プログラムの保存先が影響?)  指定したローカルにコピーするにはどうしららよいでしょうか。 2,1でサーバー上にファイルの書き込みができたのですが、FTPサーバーにあるCSVのデータの内容を  書くみたいでコピーできませんでした。  fs.Write(buffer, 0, readSize)をfs.CopyTo()に変更すればいいのではないかとおもい変更してみましたが、  fs.CopyTo(ここがわからない)が理解できずに動作しません。 アドバイスよろしくお願いいたします。 Imports System.Net Imports System.IO Module Module1 'FTP用host Private Const FTP_HOST = "ftp://TEST" 'FTP用USER Private Const FTP_USER = "ftpuser" 'FTP用PASSWORD Private Const FTP_PASS = "ftppass" 'FTPファイルコピー先フォルダ Private Const PATH_Folder = " C:\DATA" Private Function FTPDownLoad() As Boolean FTPDownLoad = False 'Try 'ダウンロードするファイルのURI Dim u As New Uri(FTP_HOST) 'ダウンロードしたファイルの保存先 Dim downFile As String = PATH_Folde Sub Main() '----------------------------- '-- FTP データ取得 '----------------------------- If FTPDownLoad() = False Then body = "FTPからのデータダウンロードに失敗しました。" + vbCrLf + sys_date & sys_time Exit Sub End If Private Function FTPDownLoad() As Boolean FTPDownLoad = False 'Try 'ダウンロードするファイルのURI Dim u As New Uri(FTP_HOST) 'ダウンロードしたファイルの保存先 Dim downFile As String = Palet_PATH_Folder 'FtpWebRequestの作成 Dim ftpReq As System.Net.FtpWebRequest = _ CType(System.Net.WebRequest.Create(u), System.Net.FtpWebRequest) 'ログインユーザー名とパスワードを設定 ftpReq.Credentials = New System.Net.NetworkCredential(FTP_USER, FTP_PASS) 'MethodにWebRequestMethods.Ftp.DownloadFile("RETR")を設定 'ftpReq.Method = System.Net.WebRequestMethods.Ftp.DownloadFile ftpReq.Method = System.Net.WebRequestMethods.Ftp.ListDirectoryDetails '要求の完了後に接続を閉じる ftpReq.KeepAlive = False 'ASCIIモードで転送する ftpReq.UseBinary = False 'PASSIVEモードを無効にする ftpReq.UsePassive = False 'FtpWebResponseを取得 Dim ftpRes As System.Net.FtpWebResponse = _ CType(ftpReq.GetResponse(), System.Net.FtpWebResponse) 'ファイルをダウンロードするためのStreamを取得 Dim resStrm As System.IO.Stream = ftpRes.GetResponseStream() 'ダウンロードしたファイルを書き込むためのFileStreamを作成 Dim fs As New System.IO.FileStream( _ downFile, System.IO.FileMode.Create, System.IO.FileAccess.Write) 'ダウンロードしたデータを書き込む Dim buffer(1023) As Byte While True Dim readSize As Integer = resStrm.Read(buffer, 0, buffer.Length) If readSize = 0 Then Exit While End If fs.Write(buffer, 0, readSize) End While fs.Close() resStrm.Close() 'FTPサーバーから送信されたステータスを表示 Console.WriteLine("{0}: {1}", ftpRes.StatusCode, ftpRes.StatusDescription) '閉じる ftpRes.Close() 'Catch ex As Exception ' MsgBox(ex.Message) ' Exit Function 'End Try FTPDownLoad = True End Function END sub

  • phpでftp送信 さくらレンタルサーバ cron

    さくらレンタルサーバの cronで、phpを実行し、他サーバのFTPサーバ(PASSIVE)が使えないへ、アップロードするphpのPGで悩んでいます。 さくらレンタルサーバは、通常のftp関数が使えなかったので、「PHP FTP Client Class By TOMO」さんのソケットでFTP送信を行うクラスを使用して、PASSIVEモードで実装、テスト環境・成功するところまでは行けたのですが、相手方のサーバ仕様が使えないことが判明し、アクティブモードに書きかえるところで、悩んでいます。 // 接続を確立する $ftp = new ftp(); $ftp->debug = TRUE;//デバグモード if (!$ftp->ftp_connect($ftp_server)) { die("Cannot connect\n"); print "Cannot connect\n"; exit; } // ユーザ名とパスワードでログインする if (!$ftp->ftp_login($ftp_user_name, $ftp_user_pass)) { $ftp->ftp_quit(); die("Login failed\n"); print "Login failed\n"; exit; } ここから先、どのように書けばよいのやら。 そもそもさくらレンタルサーバのFTPはPASSIVEなので、アクティブ送信できないのでしょうか? 何からしてよいものやら時間がないので焦ってます!

    • ベストアンサー
    • PHP
  • VBAでMP3を鳴らしたい

    vbaについて質問です。 MP3ファイルを鳴らしたいのですがうまくいきません。 --------------------------------------------------------- Sub Macro1() Dim SoundFile As String SoundFile = "C:\終了音.mp3" If Dir(SoundFile) = "" Then MsgBox SoundFile & vbCrLf & "がありません。", vbExclamation Exit Sub End If Shell "mplay32.exe /play /close " & SoundFile End Sub --------------------------------------------------------- を実行すると、 「Shell "mplay32.exe /play /close " & SoundFile」 の部分で 実行時エラー53 ファイルが見つかりません。 になります。 しかし、 If Dir(SoundFile) = "" Then MsgBox SoundFile & vbCrLf & "がありません。", vbExclamation Exit Sub End If の部分では問題ないので、ファイルはある事になってると思うのですが、 なぜ「Shell "mplay32.exe /play /close " & SoundFile」の部分でエラーになるのでしょうか? スペックは、エクセル2007、windows7です。 ご回答よろしくお願いします。

  • Excel VBA basp21でメール送信エラー

    メール送信エラーとなってしまいます。 ”Cant connect Server 11004” 同アカウントでメーラーからの送受信は成功しております。 原因はSMTP設定の関係だと思うのですが、どのようにコードを書き足せば良いのでしょうか。 また参照設定は完了しています。 ご存知のかたご回答をよろしくお願いします。 コードは以下です。 Private Sub cmd送信_Click() Dim bobj As Object Dim svname As String Dim id As String Dim pass As String Dim msg As Variant '送信チェック用 Dim strMLadr As String Dim strDPadr As String Dim strPW As String 'SMTPサーバ名:ポート番号:タイムアウト秒 svname = "サーバー:587:60" 'ログインID id = "" 'パスワード pass = "" 'オブジェクトを作成 Set bobj = CreateObject("basp21") '宛先 mailto = "" '送信者 strMLadr = "" '(送信者のメールアドレス' strDPadr = "テスト" '(送信者の表示文字列) strPW = "" '(送信者メールアドレスのパスワード) mailfrom = strDPadr & "<" & strMLadr & ">" & vbTab & id & ":" & strPW '件名 subj = "送信テスト" '本文 改行はvbCrLf body = "おはようございます。" & vbCrLf & "今日は良い天気ですね。" 'メール送信 msg = bobj.SendMail(svname, mailto, mailfrom, subj, body, "") ' 送信チェック If msg <> "" Then MsgBox "送信できませんでした。" & vbCrLf & msg, vbOKOnly + vbCritical, "エラー" Else MsgBox "送信に成功しました。", vbOKOnly + vbInformation, "完了" End If End Sub

  • 【至急】VBAについて

    今会社でエクセルを作成しています。 使用しているエクセルは2003です。 Ctrl+Fの機能とオートフィルタの機能を足したものを作成しようとしています。  現在 入力している内容は下記になります。 Dim txt As String Dim target As Range Dim rng As Range Dim adr As String 'Set target = Range("A6:L6 & Rows.Count) ' txt = InputBox("検索する内容を記述して下さい。") If txt = "" Then Exit Sub Set rng = target.Find(txt, After:=target(target.Count), LookAt:=xlPart) If rng Is Nothing Then MsgBox "ありません" Exit Sub End If adr = rng.Address Do rng.Activate Set rng = Range("A6:L" & Rows.Count).FindNext(rng) If rng.Address = adr Then MsgBox "終わりに達しました" If MsgBox("続けて調べますか?", vbYesNo) = vbNo Then Exit Do Loop End Sub 項目はA6からL6までに記入されていきます。 一部内容は空白の部分もでますが、A6・B6は必須入力です。 下方向に内容が無限に増えて行きます。 現在エラーで “オブジェクト変数または With ブロック変数が設定されていません”と出てしまっています。 Set rng = target.Find(txt, After:=target(target.Count), LookAt:=xlPart) ここの部分がおかしいように思われます。 ですが、どう直せばいいのか分からず先に進めません… 皆様の知識をお借りできればと思い投稿致しました。 何卒宜しくお願い致します。

  • FTPサーバからダウンロードするには?

    windowsXP,VB6,SP5で開発しています。 下のコードはヘルプからなんですが、 これをURLとファイル名を変更してやってみても、全然できません。 Private Sub Form_DblClick() Inet1.AccessType = icUseDefault Dim b() As Byte Dim strURL As String ' この URL は有効な URL であると仮定します。 strURL = "ftp://ftp.microsoft.com/" & _ "developr/drg/Win32/Autorun.zip" ' ファイルをバイト配列として取得します。 b() = Inet1.OpenURL(strURL, icByteArray) Open "C:\Temp\Autorun.zip" For Binary Access Write As #1 Put #1, , b() Close #1 MsgBox "完了しました。" End Sub ここの部分でタイムアウトになってしまいます。 b() = Inet1.OpenURL(strURL, icByteArray) FTPサーバのアドレスとかちゃんとあってます。 どなたか、解決方法をご教授くださいませm(_ _)m

  • phpのftp_putについて

    はじめましてphp初心者です。 以下の内容を実行した際に うまく行かず困っています。 $ftp_server="【サーバー名】"; $ftp_user_name="【アカウント名】"; $ftp_user_pass="【パスワード】"; //サーバーに接続する $conn_id = ftp_connect($ftp_server); // ユーザ名とパスワードでログインする $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); // 接続できたか確認する if ((!$conn_id) || (!$login_result)) { echo "FTP接続に失敗しました。"; exit; } else { echo "FTP接続に成功しました。"; } $local_file="【ローカルのファイルパス】"; $remote_file="【FTPサーバー上のアップロードファイルパス】"; if (!ftp_put($conn_id, $remote_file, $local_file, FTP_ASCII)) { echo "FTPアップロードに失敗しました。"; exit; } else { echo "FTPアップロードに成功しました。"; } ftp_close($conn_id); ローカル、リモート共にファイルの位置は間違っていません。 また以上のように反映させた際に返ってくる答えは 「FTP接続に成功しました。」 「FTPアップロードに成功しました。」 と出てきます。 しかし、ffftpを確認したところ サバー側に変化がありません。 手動ではffftpでアップ可能です。 ご教授お願い致します。

    • 締切済み
    • PHP

専門家に質問してみよう