[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『API関数でFTP接続しファイル情報を取得したい』(KUKI)
こんにちは。 VBAでFTP接続をしてファイルをダウンロードする方法をネット探して 出来るようになったのですが、最終更新日が取得出来なくて困っています。 別のPCでBASP21というのを使ったら日付を取得できたのですが、自分のPCは エクセル64ビット版なので無料のは使えないと書いてありました。 最終更新日の取得方法をご存じの方がいらっしゃいましたら、 ご教示願えますでしょうか?よろしくお願い致します。
コードは以下になります。 配列に格納するまでのコードになります。 (APIの宣言の部分は省略しています。)
Sub ファイル一覧取得() hOpen = 0 hConnection = 0
'IME を off (半角英数) にする If IMEStatus <> vbIMEModeOff Then SendKeys "{kanji}" End If
cnt = 0 'インターネットサービスのハンドル取得 - hOpen hOpen = InternetOpen("FTPSample", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0) If (hOpen <> 0) Then 'ハンドル取得成功
'インターネットセッションのハンドル取得(FTPサーバへ接続) - hConnection hConnection = InternetConnect(hOpen, サーバ名, INTERNET_INVALID_PORT_NUMBER, _ ユーザ名, パスワード, INTERNET_SERVICE_FTP, 0, 0) If (hConnection <> 0) Then '接続成功
'FTPサーバのカレントディレクトリを変更 result = FtpSetCurrentDirectory(hConnection, ディレクトリ) If (result <> 0) Then 'ディレクトリ変更成功 'ファイルリストを取得 hFind = FtpFindFirstFile(hConnection, "*.*", w32FindData, INTERNET_FLAG_RELOAD, 0) If (hFind = 0) Then MsgBox "ファイル名を取得できませんでした。" Else Do strFile = Left(w32FindData.cFileName, InStr(w32FindData.cFileName, vbNullChar) - 1) strFile = Mid(strFile, InStrRev(strFile, " ") + 1) 'ファイル名にゴミが付く場合は、排除。 If ((w32FindData.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = &H10) Then ReDim Preserve FileList(cnt) FileList(cnt) = strFile 'ファイル名(ディレクトリ名)をファイル名リストに追加 cnt = cnt + 1 End If Loop Until InternetFindNextFile(hFind, w32FindData) = 0 '次のファイル名を取得 End If Else MsgBox "ディレクトリの移動に失敗しました。" End If Else MsgBox "FTPサーバへ接続できませんでした。" End If Else MsgBox "FTPサーバへ接続できませんでした。" End If 'インターネットセッションを閉じる If (hConnection <> 0) Then InternetCloseHandle hConnection 'インターネットサービスを閉じる If (hOpen <> 0) Then InternetCloseHandle hOpen End Sub
< 使用 Excel:Excel2010、使用 OS:Windows7 >
回答が付かないので、コメントまで。
GUI の FTP クライアントは FTPZILLA や FFFTP などを使うのが手っ取り早いと 思いますが、VBA でないと困ることはあるでしょうか。
VBS であれば、ネット検索すると32ビットコマンドなどを経由して使用すれば64 ビット コマンドでも使用できたというような話は見かけたので、どうしても VBA ということで あれば、参考にされたらと思います。
EXCCEL 64 から、CScript 32 を呼び出して、該当部分をVBS でやるというような、面倒な 対応になると思いますが。
(Mook) 2015/04/21(火) 07:11
Mookさん
コメントありがとうございます。 FFFTPに接続して、そこに50個ほどフォルダがあるのですが、1週間の間にそれぞれの フォルダにアップロードされたファイル名を調べて報告するという作業をしているのですが、 フォルダ内をひとつひとつ確認するのが面倒なので、日付を指定して、その日付 より後にアップされたファイル名を取得してエクセルに記載するというような ことがVBAでできないかと思い質問しました。 (KUKI) 2015/04/22(水) 09:30
Sub test() Dim vList As Variant Dim cPath As String Dim i As Long
cPath = ThisWorkbook.Path & "\"
vList = Split(CreateObject("WScript.Shell").Exec("CMD /C FTP -s:""" & cPath & "ftptest.scr""").StdOut().ReadAll(), vbNewLine) For i = 1 To UBound(vList) - 1 If vList(i) = "" Then Exit For End If Cells(i, "A").Value = Mid(vList(i), 57) Cells(i, "B").Value = CDate(Mid(vList(i), 44, 12)) Next i End Sub
(以下の内容で、ブックと同じフォルダにftptest.scrを作成しておくこと)
open 接続先名またはIPアドレス
ログイン名
パスワード
ls -l
quit
(???) 2015/04/22(水) 12:02
???さん
ありがとうございます。 すみません、教えていただきたいのですが、 ftptest.scrを作成とはどのようにすればいいのでしょうか
テキストに以下の
open 接続先名またはIPアドレス ログイン名 パスワード ls -l quit
を記入してftptest.scrという名前で同じフォルダに保存するということでしょうか?
(KUKI) 2015/04/22(水) 16:33
FTP.EXEには、コマンドをスクリプトファイルとして用意しておき、これを指定することで自動実行できる機能があるので、これを利用しています。
64bitでも32bitでも、DOSプロンプト上のコマンドは同じに動くと思います。
(???) 2015/04/22(水) 16:43
返事が遅くなってすみません。 言われた通りにしたら出来ました!ありがとうございますm(__)m
すみません、また教えていただきたいのですが、コードを実行して vListの配列に格納されたデータが2つ上のフォルダでして、 2つ下のフォルダの中のファイルの日時を取得したいのですが、 フォルダを指定したりとかはできるのでしょうか?
(KUKI) 2015/04/24(金) 10:37
ありがとうございます! 無事に日付を取得することができましたm(__)m
(KUKI) 2015/04/24(金) 15:03
すみません、もうひとつ質問お願いします。
上のコードでデータを取得できたのですが、データの末尾にスペースみたいなのが 入っていて、Trimで削除しようとしたのですが、消えませんでした。 If Right(vList(i),1) = " " then で確認したところFalseだったのですが、 半角スペースではないのでようか?
vList(i) = Left(vlist(i),len(vlist(i))-1) でスペースは消えたのですが、 このスペースみたいなのの正体ってなんなのでしょうか?
(KUKI) 2015/04/24(金) 15:34
lsの結果を画面表示する場合は改行コードは1つなのですが、リダイレクションすると、ファイル名の後に、改行がだぶるようです。
見た目には判らないので、気づきませんでした。
かといって、2つの改行コードでSplitはできない(他の文字列は改行が1回なので、繋がってしまう)ので、
現状のように末尾1文字切り捨ててご使用ください。
(???) 2015/04/24(金) 16:08
???さん
教えていただきありがとうございましたm(__)m おかげで思った通りの動きになりました。 本当にありがとうございました。 (KUKI) 2015/04/24(金) 16:47
???さん
おはようございます。 先日はありがとうございました。 すみません、もう一つ質問お願いします。 処理中に黒い画面が出てくるのを非表示にすることってできるのでしょうか?
(KUKI) 2015/04/27(月) 10:57
更には、もし処理が中断してプロセスが残ってしまった場合に、ウィンドウが見えないので、問題に気づきにくくなってしまいます。
(???) 2015/04/27(月) 11:07
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.