プロが教えるわが家の防犯対策術!

エクセルVBAでエクスプローラに表示されるデータ取得するコードを教えてください。
例えば、
C:\Documents and Settings\USER\デスクトップ\TEST004.xlsが、エクスプローラに表示される「サイズ」と「更新日時」を取得するにはどのよなコードになるでしょうか?

A 回答 (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で表示しているのは作成日付です。
エクスプローラにデフォルトで表示されているのは更新日付です。
([表示]→[詳細表示の設定]で、作成日付を表示することが出来ます。)

ダウンロードしたファイルの作成日付と、更新日付は多少のずれがあります。
(しかも、順番が前後していますね(^^;)

具体的にどれくらい差がありました?
大幅に狂うようなら問題ですが、多少の誤差は仕方ないと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
会社でないとイントラにアクセスできないので試せませんでした。

> ダウンロードしたファイルの作成日付と、更新日付は多少のずれがあります。
>(しかも、順番が前後していますね(^^;)

> 具体的にどれくらい差がありました?

ひょっとしたらわたしの勘違いだったのかも知れません。
いまやるとtest03でDL日時を表示しました。
先週やったら1か月も前の日付が出た(と思った)ので質問しました。
有難うございました。

お礼日時:2007/10/15 13:56

これも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 'サイズ
    • good
    • 0
この回答へのお礼

有難うございました。
ダウンロードしたファイル自身のVBAで、test5のように自分自身のダウンロード日付を調べるとき、DateLastModifiedでは、開いた日時になってしまうようです。

Sub test5()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
MsgBox FSO.GetFile(ThisWorkbook.FullName).DateLastModified
Set FSO = Nothing
End Sub

お礼日時:2007/10/15 14:01

>エクスプローラに表示されるデータ取得する


字面通り厳密に解釈して、「エクスプローラ上に表示されているデータ」
と言う意味なら、非常に難しいです。(不可能かも(^^;)

拡大解釈して、「エクスプローラ上に表示されるデータと同様のデータ」
と言う意味なら、幾つかの情報は簡単に取得できます。

ファイルサイズに関しては、FileLen関数
更新日付に関しては、FileDateTime関数

例:
MsgBox(FileLen("C:\Documents and Settings\USER\デスクトップ\TEST004.xls"))
MsgBox(FileDateTime("C:\Documents and Settings\USER\デスクトップ\TEST004.xls"))

あと、VBAで用意されている関数は、GetAttr関数と言う物があります。
これで、属性(システムファイル、読み取り専用ファイル等)を
調べることが出来ます。

No1の回答にもあります、FileSystemObjectを使えば、作成日付や、
アクセス日付も調べられます。

例えば・・・ではなく、具体的にどんな情報が欲しいのでしょうか?
補足して頂ければ、もっと具体的な回答が出ると思いますよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。
エクセルファイルのイントラネットからのダウンロード日時を取得したいのです。ここでいろいろ質問して以下を試しました。

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日時を表示している(と思われる)「エクスプローラ上に表示されているデータ」という質問になったわけです。

お礼日時:2007/10/12 16:58

参考:


FileSystemObjectの解説
http://officetanaka.net/excel/vba/filesystemobje …
こちらが参考になるのでは?
    • good
    • 0
この回答へのお礼

有難うございます。勉強してみます。

お礼日時:2007/10/12 16:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!