
仮にディスクトップに1つのフォルダがあるとします。
そのフォルダには、エクセルのファイルが1つ、その他には、.htmlファイルや.css、.gif、.txtなどの複数のファイルがあります。
また、エクセルのSheet1のA1にホスト名、A2にユーザ名、A3にパスワードがあるとします。
そこで、エクセルVBAで、FTPアップロードを行いたいのですが、可能でしょうか?
ちなみに、関係ないファイルがサーバーに上がっては困るので、エクセルの.xlsmの形式や、.txtなど任意のファイル形式を除いたファイルをアップロードしたいと考えています。
いろいろ調べてみたのですが、私の手には負えないので、こちらで質問しています。
どなたか教えて頂けないでしょうか。
よろしくお願いします。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
ご相談内容を変更して新たなご相談とされるのでしたら,こちらのご相談投稿は解決で閉じる操作を忘れず行っておいてください。
FFFTPを直接ExcelVBAから操作したいという事のご様子ですが,おそらく出来ませんので,残念ですが私の方からアドバイスできる内容はありません。
Sendkeyで無理矢理操作するのは,まぁ必要に応じてタイマーを噛ませるなどしてゆっくりキーを送っていけば,もしかすると?出来るかも??しれませんが,この点についての追加のアドバイスはありません。
No.5
- 回答日時:
繰り返しますが、アップロード先の指定が間違ってるんじゃないでしょうかね。
アナタガやってるマクロの具体的なフィードバックが無いので、こちらもお話しするネタ切れです。
内容は変わりませんが、試しにこちらも参考にしてみたらどうでしょう。
http://officetanaka.net/excel/vba/tips/tips47.htm
この回答への補足
keithinさん、度々の回答ありがとうございます。
やはり、なぜか上手くいかないようです。
そこで、今回は、諦めて別の方法でやってみようと思います。
「FFFTPを立ち上げて、ホスト一覧からサイト名を選んで接続」までをVBAで出来たらいいなと思いました。
そこで以下のような感じでffftpは立ち上がったのですが、ホスト一覧からサイト名を選択して接続するやり方がわかりません。
ちなみにエクセルA1にサイト名があるとします。
(これって、もしかして、不可能でしょうか?)
Sub Sample()
Dim rc As Long
rc = Shell("C:~\FFFTP.exe", vbNormalFocus)
If rc = 0 Then MsgBox "起動に失敗しました"
End Sub
度々の質問で申し訳ありません。
No.4
- 回答日時:
アップロード先の指定が間違ってるんじゃないですか?
Sub CommandButton1_Click()
Set BASP21 = CreateObject("Basp21.FTP")
rc = BASP21.Connect(Worksheets("Sheet1").Range("A1").Value, Worksheets("Sheet1").Range("A2").Value, Worksheets("Sheet1").Range("A3").Value)
If rc = 0 Then
myPath = "c:\test\"
myfile = Dir(myPath & "*.*")
Do Until myfile = ""
If myfile Like "*.xlsx" Or myfile Like "*.txt" Then
’do nothing
Else
msgbox "you get " & myfile
rc = BASP21.PutFile(myPath & myfile, "", 1)
If rc = 0 Then
MsgBox "FTPアップロード 無"
ElseIf rc > 0 Then
MsgBox "FTPアップロード OK"
Else
MsgBox "FTPアップロード NG"
End If
End If
myfile = Dir()
Loop
rc = BASP21.Close()
Else
MsgBox "FTP接続 NG"
End If
End Sub
マクロからBasp21の呼び出し自体は成功してるっぽいので大丈夫だと思いますが、もしもコネクト自体出来てない気配があるようなら、
http://kchon.blog111.fc2.com/blog-entry-170.html
のサンプルマクロのコメントにあるように
' FTPアップロードのサンプル(VBA)
' Basp21.dllとBsmtp.dllをC:\Windowsにコピーしています
' [Regsvr32.exe Basp21.dll]を実行しています
も実行してみたらどうでしょう。
度々ありがとうございます。
試してみたのですが、エクセル上では「you get ファイル名」「FTPアップロード 無」が繰り返し表示れます。(ちょっと時間がかかる感じです)
ffftpソフトで調べてみると、実際はアップされていませんでした。
もう少し、考えてみたいと思います。
No.3
- 回答日時:
>rc = BASP21.Connect("ftp.xxx.com", "ftp_id", "ftp_ps")
これはそのまま
rc = BASP21.Connect(worksheets("Sheet1").range("A1").value, worksheets("Sheet1").range("A2").value, worksheets("Sheet1").range("A3").value)
のようになりますね。
>また、"c:\temp\test.dat"ここの部分
対象のファイル(「test.dat」の部分)の拾い出し方は、先の回答で回答済みです。
丸ごとまたマクロを書かないと、全然応用できませんか?
作成例:
dim myPath
dim myfile
mypath = "c:\test\"
myfile = dir(mypath & "*.*")
do until myfile = ""
if myfile like "*.xlsx" or myfile like "*.txt" then
'do nothing
else
rc = BASP21.PutFile(mypath & myfile, "/home", 1)
end if
myfile = dir()
loop
>フォルダの場所がいつも決まっているとは限りません。
それで? 決まってないにしても「マクロを実行したいギリギリのこの瞬間」には、当然「どこか」にはファイルはあるんですよね。
それを前述のmypathに放り込んでやるような事になります。
どこにあるのか判りませんだけでは、具体的なマクロの書きようもありません。それは判りますよね?
要は、マクロを実行するときに「具体的にファイルはここにある」をマクロに示し、回答マクロのmypathが「mypath = "c:\test\"」のようになっていればイイという事です。どうしたらフォルダを指定できるのか、アナタの実際の作業の中で、具体的に出来ることを考えて下さい。
繰り返しますが「違います、出来ません」では、全く何一つ先に進まないので、「こうです、こうすればできます、こうしたいです」を具体的に考えて下さい。
どうしても自分じゃどうしたらいいのか考え付かないけどマクロは書かなきゃならないなら、回答したマクロに合うように、具体的には「C:\test\」の中にファイルを放り込んでください。
この回答への補足
度々、すいません。
以下のように書いて、試してみたのですが、「FTPアップロード無」と出てしまいます。
「c:\test\」ここの場所にエクセルやhtmlのファイルとおいてみたのですが、なぜかアップロードしません。
書き方が間違っているでしょうか?
Sub CommandButton1_Click()
' FTP用コンポーネントの宣言
Set BASP21 = CreateObject("Basp21.FTP")
' FTP接続(オープン)
rc = BASP21.Connect(Worksheets("Sheet1").Range("A1").Value, Worksheets("Sheet1").Range("A2").Value, Worksheets("Sheet1").Range("A3").Value)
' FTP接続結果チェック
If rc = 0 Then
' FTPアップロード
Dim myPath
Dim myfile
myPath = "c:\test\"
myfile = Dir(myPath & "*.*")
Do Until myfile = ""
If myfile Like "*.xlsx" Or myfile Like "*.txt" Then
'do nothing
Else
rc = BASP21.PutFile(myPath & myfile, "/home", 1)
End If
myfile = Dir()
Loop
' FTPアップロード結果チェック
If rc = 0 Then
MsgBox "FTPアップロード 無"
ElseIf rc > 0 Then
MsgBox "FTPアップロード OK"
Else
MsgBox "FTPアップロード NG"
End If
' FTP切断(クローズ)
rc = BASP21.Close()
Else
MsgBox "FTP接続 NG"
End If
End Sub
No.2
- 回答日時:
ん?
紹介したURLに「BASP21のダウンロードおよびインストールに関しては、上記サイトをご覧ください。」と書いてある通り、そのリンクを見る
リンクには「BASP21のインストール 適当なディレクトリに BASP21.exe をダウンロードします。 インストールは、BASP21.exe を実行するだけ。すぐ終わります。 」と書いてある通り、ダウンロードしてWクリックして実行する
他のアップデートも置いてあるので、状況を見て必要に応じてダウンロードし、入れ替える。
以上です。
keithinさん、回答ありがとうございます。
BASP21のインストールをしてftpに接続するところまでは出来ました。
しかし、
rc = BASP21.Connect("ftp.xxx.com", "ftp_id", "ftp_ps")
rc = BASP21.PutFile("c:\temp\test.dat", "/home", 1)
この2つ部分がよくわかりません。
ftp.xxx.com", "ftp_id", "ftp_psの部分でエクセルSheet1のA1、A2、A3を反映させるとか基本的なことがわかっていません。
また、"c:\temp\test.dat"ここの部分では、フォルダの場所がいつも決まっているとは限りません。
すいませんが、今回の場合では、どのようなVBAを書けばいいか具体的に教えていただけないでしょうか?
No.1
- 回答日時:
色々調べたのでしたら既に見つけて勉強済みかもしれませんが。
BASP21を使う例が下記に解説されています。こちらの方が簡単なのでお勧めです。
http://www.moug.net/tech/exvba/0150107.html
http://kchon.blog111.fc2.com/blog-entry-170.html
API関数を使う方法が下記に解説されています
http://www.happy2-island.com/access/gogo03/capte …
アップロードするファイルの仕分けは、単純に標準的なdir関数のループで十分に思えますが、それも判らないのでしたら。
dim myfile
myfile = dir("c:\test\*.*")
do until myfile = ""
if myfile like "*.xlsx" or myfile like "*.txt" then
'do nothing
else
'ftp upload
end if
myfile = dir()
loop
回答ありがとうございます。
「basp21」と言うのがあると言うのは分かったのですが、具体的に何をどうすればいいかよくわかりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】excelファイルを開く...
-
Windows10のクイックアクセスと...
-
エクセルのマクロの保存先につ...
-
VB.NetでExcelファイルをAccess...
-
Word 2016のマクロを Word 2021...
-
マクロが使えるExcelViewer
-
Excelでこの式の意味をおしえて...
-
excelファイルに使われているVB...
-
Excelマクロ ファイル名が変わ...
-
EXCEL VBAで声を出すマクロ
-
エクセルでマクロでテキストデ...
-
エクセル終了時の保存確認メッ...
-
エクセル2013vbaで、見えない名...
-
Excelが勝手にシート移動してし...
-
エクセルファイルを自身のファ...
-
Wordで貼り付け(ペースト)機能...
-
cellsで特定の離れた範囲を選択...
-
フォルダ内の全ブックのシート...
-
エクセルでツールバーに「縮小...
-
【エクセルマクロ】合計値が指...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows10のクイックアクセスと...
-
【マクロ】excelファイルを開く...
-
VBAを一度起動するとずっと出て...
-
昨日まで動いていたエクセルの...
-
excelファイルに使われているVB...
-
エクセル終了時の保存確認メッ...
-
Excelが勝手にシート移動してし...
-
コピーしたファイルのマクロを...
-
VBA マクロ実行時エラー’1004Ra...
-
Excelマクロ ファイル名が変わ...
-
別のパソコンでエクセルのマク...
-
エクセル2013vbaで、見えない名...
-
EXCEL マクロ クリップボードク...
-
マクロを消すマクロは不可能?
-
【マクロ】エラーが発生⇒実行時...
-
excelが別プロセスで起動してし...
-
マクロを設定したのに、拡張子...
-
【マクロ】宣言は、何のために...
-
作成したマクロを共有
-
マクロでマクロを削除する
おすすめ情報