仮にディスクトップに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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Access(アクセス) Access VBA を利用して、フォルダ内のファイルの名称を変更したい 1 2023/08/03 08:27
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/03 13:18
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Excel(エクセル) フォルダAから1つのファイルだけを、フォルダBへを移動するVBAについて 2 2022/07/25 11:45
- サーバー WIN10のファイル又はフォルダを社内LAN上HDDで共有する場合、特定の人だけが見えるようにしたい 3 2023/04/18 00:32
- Visual Basic(VBA) VBA初心者です。電話番号の数字の前に0を表示させたいです。 2 2022/12/14 03:58
- Excel(エクセル) 【VBA】フォルダAにある2つのファイルの内1つを、フォルダBへ。もう1つを、フォルダBへ移動したい 6 2022/07/26 08:51
- Excel(エクセル) エクセルで、ファイルの分割 と ファイルの集約 1 2022/08/28 08:58
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
EXCEL VBA でIEを制御して、INPUT type=file で出るダイアログに入力できませんか?
Access(アクセス)
-
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
-
4
DoEvents関数って何?
Visual Basic(VBA)
-
5
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル終了時の保存確認メッ...
-
VBA マクロ実行時エラー’1004Ra...
-
EXCEL マクロ クリップボードク...
-
AccessからExcelマ...
-
コピーしたファイルのマクロを...
-
excelファイルに使われているVB...
-
マクロを設定したのに、拡張子...
-
アクセスからエクセルファイル...
-
エクセルマクロにてパワーポイ...
-
Excelが勝手にシート移動してし...
-
Excel2010 PERSONAL.xlsbの挙動...
-
VBAを一度起動するとずっと出て...
-
エクセルでマクロでテキストデ...
-
ワードを開いたときにコントロ...
-
EXCELでマクロを記録する際に、...
-
Word用のマクロが急に働かなく...
-
マクロでマクロを削除する
-
エクセル2013vbaで、見えない名...
-
外部データを取り込むマクロ
-
エクセルで<名前をつけて保存...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル終了時の保存確認メッ...
-
VBAを一度起動するとずっと出て...
-
【マクロ】その時、その時で変...
-
VBA マクロ実行時エラー’1004Ra...
-
昨日まで動いていたエクセルの...
-
マクロの有効化するダイヤログ...
-
別のパソコンでエクセルのマク...
-
コピーしたファイルのマクロを...
-
EXCEL マクロ クリップボードク...
-
excelファイルに使われているVB...
-
エクセルファイルを自身のファ...
-
Excelマクロ ファイル名が変わ...
-
Microsoft Excelのファイルのエ...
-
Excelが勝手にシート移動してし...
-
excelが別プロセスで起動してし...
-
エクセルマクロ実行中に別ファ...
-
エクセル2013vbaで、見えない名...
-
マクロでマクロを削除する
-
アクセスでファイルを開いたと...
-
Excel2010 PERSONAL.xlsbの挙動...
おすすめ情報