- ベストアンサー
VBAでエクスプローラに表示されるデータ取得
エクセルVBAでエクスプローラに表示されるデータ取得するコードを教えてください。 例えば、 C:\Documents and Settings\USER\デスクトップ\TEST004.xlsが、エクスプローラに表示される「サイズ」と「更新日時」を取得するにはどのよなコードになるでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.2回答者です。 >エクセルファイルのイントラネットからのダウンロード日時を取得したいのです。 なるほど、状況が把握できました。 WinodwsXP IE6 Excel2000で検証してみました。 19:30:00 ダウンロード開始(時間のみ抜粋) 19:30:15 ファイルに保存 エクスプローラ上の表示 作成日付 19:30:15 更新日付 19:30:02 VBA(FileDateTime) 更新日付 ブックを開いた時間 FSO(DateCreated、DateLastModified) 作成日付 19:30:15 更新日付 ブックを開いた時間 と言う結果で、作成日付は一致しましたが、 更新日付は一致しませんでした。 推測ですが、Ecxelには自動修復機能などがあり、 自動的にバックアップを作ったりしている為だと思います。 ちなみに、閉じているブックを調べた場合、 更新日付もエクスプローラの表示と一致しました。 (VBAを実行しているファイルと、調べる対象が異なる場合) ダウンロードしたファイル自身のVBAで、 自分自身のダウンロード日付を調べるには、 FSOで作成日付を調べるのが妥当だと思います。 つまり、test03の方法でですね。 >test03がたいていの場合、ただしくDL日時を返してくれるのですが、どういうわけか返さない場合もありましたので、常にDL日時を表示している(と思われる)「エクスプローラ上に表示されているデータ」という質問になったわけです。 test03で表示しているのは作成日付です。 エクスプローラにデフォルトで表示されているのは更新日付です。 ([表示]→[詳細表示の設定]で、作成日付を表示することが出来ます。) ダウンロードしたファイルの作成日付と、更新日付は多少のずれがあります。 (しかも、順番が前後していますね(^^;) 具体的にどれくらい差がありました? 大幅に狂うようなら問題ですが、多少の誤差は仕方ないと思います。
その他の回答 (3)
- zap35
- ベストアンサー率44% (1383/3079)
これもFSOで取得可能です Set FSO = CreateObject("Scripting.FileSystemObject") FSO.GetFile("C:\Documents and Settings\USER\デスクトップ\TEST004.xls").DateLastModified '最終更新日 FSO.GetFile("C:\Documents and Settings\USER\デスクトップ\TEST004.xls").Size 'サイズ
お礼
有難うございました。 ダウンロードしたファイル自身のVBAで、test5のように自分自身のダウンロード日付を調べるとき、DateLastModifiedでは、開いた日時になってしまうようです。 Sub test5() Dim FSO Set FSO = CreateObject("Scripting.FileSystemObject") MsgBox FSO.GetFile(ThisWorkbook.FullName).DateLastModified Set FSO = Nothing End Sub
- venzou
- ベストアンサー率71% (311/435)
>エクスプローラに表示されるデータ取得する 字面通り厳密に解釈して、「エクスプローラ上に表示されているデータ」 と言う意味なら、非常に難しいです。(不可能かも(^^;) 拡大解釈して、「エクスプローラ上に表示されるデータと同様のデータ」 と言う意味なら、幾つかの情報は簡単に取得できます。 ファイルサイズに関しては、FileLen関数 更新日付に関しては、FileDateTime関数 例: MsgBox(FileLen("C:\Documents and Settings\USER\デスクトップ\TEST004.xls")) MsgBox(FileDateTime("C:\Documents and Settings\USER\デスクトップ\TEST004.xls")) あと、VBAで用意されている関数は、GetAttr関数と言う物があります。 これで、属性(システムファイル、読み取り専用ファイル等)を 調べることが出来ます。 No1の回答にもあります、FileSystemObjectを使えば、作成日付や、 アクセス日付も調べられます。 例えば・・・ではなく、具体的にどんな情報が欲しいのでしょうか? 補足して頂ければ、もっと具体的な回答が出ると思いますよ。
お礼
ありがとうございます。 エクセルファイルのイントラネットからのダウンロード日時を取得したいのです。ここでいろいろ質問して以下を試しました。 Sub test01() MsgBox "FileDateTime:" & FileDateTime(ThisWorkbook.FullName) End Sub Sub test02() MsgBox "作成者は:" & ActiveWorkbook.BuiltinDocumentProperties(3).Value _ & vbCrLf & "最終更新者は:" & ActiveWorkbook.BuiltinDocumentProperties(7).Value _ & vbCrLf & "作成日時は:" & ActiveWorkbook.BuiltinDocumentProperties(11).Value _ & vbCrLf & "更新日時は:" & ActiveWorkbook.BuiltinDocumentProperties(12).Value End Sub Sub test03() Dim FSO Set FSO = CreateObject("Scripting.FileSystemObject") MsgBox "DL日時:" & FSO.GetFile(ThisWorkbook.FullName).DateCreated End Sub test03がたいていの場合、ただしくDL日時を返してくれるのですが、どういうわけか返さない場合もありましたので、常にDL日時を表示している(と思われる)「エクスプローラ上に表示されているデータ」という質問になったわけです。
- n-jun
- ベストアンサー率33% (959/2873)
参考: FileSystemObjectの解説 http://officetanaka.net/excel/vba/filesystemobject/index.htm こちらが参考になるのでは?
お礼
有難うございます。勉強してみます。
お礼
ありがとうございます。 会社でないとイントラにアクセスできないので試せませんでした。 > ダウンロードしたファイルの作成日付と、更新日付は多少のずれがあります。 >(しかも、順番が前後していますね(^^;) > 具体的にどれくらい差がありました? ひょっとしたらわたしの勘違いだったのかも知れません。 いまやるとtest03でDL日時を表示しました。 先週やったら1か月も前の日付が出た(と思った)ので質問しました。 有難うございました。