- ベストアンサー
最終更新日
実行中のファイルの最終更新日を取得したいのですが、どうすればよいですか? エクセルのファイル等を開くと、ファイルの更新日には開いた時の日時が一時的に入り、そのファイルを保存せずに終了すれば、開く前に入力されていた更新日に戻りますが、この開く前に入力されて更新日を所得したいのです。 DateLastModified等を使用すると開いた時の日時になってしまいます。 何か方法をご存知でしたら教えて下さい。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
すみません。 ここまで続けてきて、いまだに「本当の目的」がわかりません。 ファイルの日付云々に関しては、これだけ回答があったものを全部「不可」とされてきたのですから、別の方法を考える次期だと思います。 エクセルのファイルがいくつかのVBプログラムのランチャーになっていて、リンクをクリックすることでこれらを起動する、と。 ここまではよくわかるのですが、なぜランチャーであるExcelファイルの日付が必要なのですか? 本当の意味での「目的」がわからないのです。 最終的にどうしたいのですか?
その他の回答 (4)
> 逆なのです。 > excelのファイルにいくつかの、VBのプログラムがリンクされていて、そこからVBを実行しているため、VBの処理の中でexcelを開く前の情報は取れないです。 これは初めて出てきた状況説明ですね。 的確な回答を素早く得るためには状況や環境は詳しく書きましょう。 回答者の方々が作成したシステムではありませんので、書かれている状況以上のことはわかるはずがありません。 #2さんの回答と私の回答のパズルは解けましたか? 上記補足から察するに、VBAが記述されているファイルは記述されているコードを実行するだけでなく、シート内のデータも更新され、保存される、と。 つまり、データとプログラムが一緒になってしまっている。 なおかつ外部プログラム(VBで記述されたもの)もExcelから起動し、自分自身(Excelファイル)の情報を参照している。 という感じですか? 継続して運用するプログラムの場合、データと処理を分けましょう。 プログラムのみ記述されたExcelファイル(Prg-A)を実行し、データが記述されたExcelファイル(DATA)を外部ファイルとして、そのデータをコントロールする。 Prg-Aから起動されたVBプログラム(Prg-B)もDATAをコントロールする。 そうすればDATAを完全に独立した「ファイル」として扱うことができますから今回のように「処理が入り組んでしまった」状況から開放されます。 と、上記の解決方法はあくまで理想です。 安易に解決したいのであれば、ですが。 ファイル更新日の件は問題のExcelファイルの「ThisWorkbookオブジェクト」の「Workbook_BeforeSaveイベント」で、ブック内の特定のシートの特定のセルに現在の日時を記録しておく、と。 その情報をVBプログラムから読み取る方法は2つ考えられます。 1. 起動したVBプログラムから該当Excelファイルを開いてセルの値を読み取る。 ただしそのファイルはVBプログラムを呼び出したファイルなのですでに開いていますよね。なので二重起動になります。 呼び出す際はExcel.Applicationオブジェクトを非表示のままインスタンスを作成してファイルを開く、と。 2. VBプログラムの改変が必要になりますが、VBプログラムが起動する時にコマンドライン引数を受け取るようにしておく。 Excelファイルは自身のセル上に書いてある最終更新日時を読み取り、VBプログラムを呼び出すときに、「xxx.exe "2002/12/21 2:10:49"」と指定してあげる。 VBはCommand関数でその引数を読み取って処理を継続する。 どうでしょうか。
補足
すみません。説明が下手で・・・・ 言葉が足りずにご迷惑をおかけしました。 excel上ではプログラムは書いていません。NO3の補足で書いたとおり、VBのプログラムのリンクしているだけです。データ=VBプログラム名です。セルにハイパーリンクがはられているVBのプログラム名が書かれていてるといった感じです。 上記方法は、エクセルを保存する前に必ずセルにその日を記入するといったことが前提ということでしょうか? でも、最終更新日が更新されるのは、必ずしもファイルが立ち上げられた時とは限りませんよね?例えば、そのexcelのファイルをメールでやり取りする人がいたとしたら、その添付ファイルを自分のPCに保存した日が最終更新日になるのではないのでしょうか?こういったことが起きれば、実際の最終更新日とセルの値は違ったものになってしまうと思うのです。 もし間違った方向に解釈していたのでしたらすみません。
> 開いている*.xlsの更新日が特定の日付だったらというような処理をしたいのです。 これで回答に行き当たったような気がするのですが・・・ 開く前に更新日を取得しておけばいいんじゃないですか?
補足
逆なのです。 excelのファイルにいくつかの、VBのプログラムがリンクされていて、そこからVBを実行しているため、VBの処理の中でexcelを開く前の情報は取れないです。 といったことから、NO.2で書いた補足の部分の質問を書いたのですが・・・
- nta
- ベストアンサー率78% (1525/1942)
実行中(開いた後)というところに無理があるようです。開く前であればDateLastModifiedで得られると思います。ただし、NTFSファイルシステムでなければ作成日時と常に一致していたと記憶しています。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/jsprodatelastmodified.asp
補足
excel以外のファイルでは、開いた時に日時が最終更新日に書き込まれることはないと思うのですが、*.xlsでは書きかわっています。 例えば、excelのあるファイルを開いても保存せずに終了を掛けると、開く前に保存されていた最終更新日が再度書き込まるので、どこかに、開く前の最終更新日データが保管されているのでは?と思ったのですが・・・・ 開いている*.xlsの更新日が特定の日付だったらというような処理をしたいのです。
- karon24
- ベストアンサー率40% (8/20)
FileDateTime("C:\AAA.txt") とすれば更新日時が取得できるようですが、 これではダメでしょうか?
補足
ありがとうございます。 でも、FileDateTimeも開いた時の日時の取得ではないですか? これだとDateLastModifiedの時と同じになるので、私が求めているものではありません。
お礼
「目的」ははっきり書いているつもりです。excelのファイルの最終更新日(又は最終取得日)を知りたいという以外にありません。 それをどのように使うかは、また別の話ではないでしょうか・・・ たぶん、これだけの期間質問を続けても私の求めるもの(excelァイルを開いている最中に最終更新日のデータは取得する方法)は出来ないということでしょう。 私も他の方法を考えようと思っていたところです。 説明が下手な私にお付き合い頂きましてありがとうございました。