advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 1215 for (Mook) (0.001 sec.)
[[20150420153458]]
#score: 9211
@digest: be8b256537b54548dfc844afb1a30ce6
@id: 67823
@mdate: 2015-04-27T02:07:13Z
@size: 7582
@type: text/plain
#keywords: hconnection (56447), ftptest (46493), w32finddata (36904), vlist (30464), hopen (28639), strfile (16654), kuki (16263), ftp (10699), ル取 (7259), 接続 (6556), internet (6358), ィレ (4974), (ku (4931), プト (3975), サー (3261), cpath (3083), レク (3028), ーネ (2979), 行コ (2651), トリ (2410), 取得 (2298), ビッ (2266), スワ (2243), ビス (1844), 2015 (1750), 成功 (1714), ディ (1697), ーバ (1642), ル名 (1601), ドル (1545), ハン (1543), 改行 (1541)
『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 ---- windows付属の、FTP.EXEを利用するのはいかがでしょうか。 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 ---- その通りです。メモ帳等のエディタを使ってください。 何も結果が得られない場合は、DOSプロンプトを立ち上げ、FTP -s:ftptest.scr を実行してみてください。 FTP.EXEには、コマンドをスクリプトファイルとして用意しておき、これを指定することで自動実行できる機能があるので、これを利用しています。 64bitでも32bitでも、DOSプロンプト上のコマンドは同じに動くと思います。 (???) 2015/04/22(水) 16:43 ---- ???さん 返事が遅くなってすみません。 言われた通りにしたら出来ました!ありがとうございますm(__)m すみません、また教えていただきたいのですが、コードを実行して vListの配列に格納されたデータが2つ上のフォルダでして、 2つ下のフォルダの中のファイルの日時を取得したいのですが、 フォルダを指定したりとかはできるのでしょうか? (KUKI) 2015/04/24(金) 10:37 ---- はい、別途作成したftptest.scrの中で、パスワードを指定した次の行に、cd aaa/bbb とか入れてください。 (???) 2015/04/24(金) 10:56 ---- ???さん ありがとうございます! 無事に日付を取得することができました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 ---- 改行コードvbNewLine(&H0D)が1バイトくっついてますね。 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 ---- 現状、vListを1行で作成している部分をやめて、Shell関数でDOSプロンプトを起動するようにして、この引数にvbHideを指定すれば隠れます。 が、複数行に分かれてしまうし、変数宣言も増えるし、Shellの完了を調べるような処理が必要になるし、改悪になるので、ちょっと…。 更には、もし処理が中断してプロセスが残ってしまった場合に、ウィンドウが見えないので、問題に気づきにくくなってしまいます。 (???) 2015/04/27(月) 11:07 ...
http://www.excel.studio-kazu.jp/wiki/kazuwiki/201504/20150420153458.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97014 documents and 608133 words.

訪問者:カウンタValid HTML 4.01 Transitional