前回保存日時の取得について

更新日時(FileDateTime)ではなく、前回保存日時(ブックのプロパティ - 詳細タブ内)について質問です。

VBAを利用する・対象ブック名ブック内に日付を入れることは不可能・更新日時は利用しないという前提でお願いします。

(追記:更新日時を利用しない理由は、前回保存日時とズレがあるためです。取得したい値は前回保存日時です。)

 

前回保存日時はブックのBuiltInDocumentPropertiesプロパティのLastSaveTimeに格納されていることは分かったのですが、

前回保存日時の取得対象が開かれていない場合の当該プロパティの取得方法が分かりません。

ActiveWorkbookやThisWorkbookでは正常に取得できるのですが・・・

(追記:BuiltInDocumentPropertiesプロパティはブックを開いていないと参照できないようです。別の方法を探しております。)

 

実現したいことは、

 1.ローカルのWorkbook_Open時に、サーバー上にある対象ブックの前回保存日時を表示する

 2.操作者はその日時から特定の操作を行うべきかどうかを判断する(MsgBox-vbYesNo)

 3.操作を行うべきと判断されたときは対象ブックを開く

といった一連の手順なのですが、1番で躓いてしまいました。

 

VBAに関することなので、このトピックに投稿しても良いものか判りかねます。

もし投稿場所が不適切であればご指摘ください。VBAのMS公式フォーラムなどあれば、それを教えていただけると助かります。

 

以上、よろしくお願いいたします。

いくつか手段はありますが、FileSystemObject を使用する例を出しておきます。

Sub aaa()
Dim FS As Object, wFile As Object, wFileName As String
Set FS = CreateObject("scripting.filesystemobject")
With FS
  wFileName = "C:\Users\xxxx\Desktop\AAA\ABook.xlsx"
  If FS.fileexists(wFileName) Then
     Set wFile = FS.getfile(wFileName)
     MsgBox wFile.datelastmodified
  End If
End With
Set FS = Nothing
End Sub

これはデスクトップにあるフォルダのファイルの存在をチェックした上で、ファイルの更新日を取得しています。

サーバー上のファイルであってもドライブを

\\xxxxx\yyyy\ssss.xls

のようにサーバー名に書き換えれば同じです。

ファイルシステムオブジェクトについては検索すれば山のように出てきますが一例として

田中亨さんのサイトを示しておきます。

http://officetanaka.net/excel/vba/filesystemobject/index.htm

この回答が役に立ちましたか?

お役に立てず、申し訳ございません。

素晴らしい! フィードバックをありがとうございました。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。

>>y sakuda様

早速のご回答、ありがとうございます。

 

教えていただいた通りにコードを書いてみましたが、やはり更新日時(≠前回保存日時)が表示されてしまいます。

FileオブジェクトのDateLastModifiedプロパティでは前回保存日時は取得できないようです。

 

確認したところ、Workbooksオブジェクトはファイルを開いていることが前提のようで、

開いていない状態ではBuiltInDocumentPropertiesプロパティを参照できないことが分かりました。

また、現状として「サーバー上の対象ファイルの更新日時と前回保存日時にズレがある」ことを記載しておりませんでした。

肝心なところで誤り・説明不足があったことをお詫びします。

 

まだ問題は解決しておりませんが、FileSystemObjectの使用は勉強になりました。

ありがとうございました。

1 人がこの回答を役に立ったと思いました。

·

この回答が役に立ちましたか?

お役に立てず、申し訳ございません。

素晴らしい! フィードバックをありがとうございました。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。

前回保存日時と更新日時とどう違うんでしょうか??

私には理解できません。

 

この回答が役に立ちましたか?

お役に立てず、申し訳ございません。

素晴らしい! フィードバックをありがとうございました。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。

>>y sakudaさま

>>前回保存日時と更新日時とどう違うんでしょうか??

 

ここ数日PCを使える環境になかったため、確認が遅れて申し訳ありません。

 

前回保存日時と更新日時がどう違うのかは私にも解りません。

ただはっきりしているのは、

  1.サーバー上の単一のExcelブックで、前回保存日時と更新日時にズレがあること

  2.内容を更新しても更新日時が正しく変化しないこと(4月21日13時のまま)

  3.内容を更新すると前回保存日時が正しい日時に変化すること

といった事象です。

 

現在はScreenUpdatingをFalseにした上でサーバー上のブックを開き、

そこから前回保存日時を取得するという方策で一応の処理ができています。

しかし、使わないかもしれないのにブックをとりあえず開くという、あまりスマートでない

やり方が好ましくないということ、元ブックの起動処理に相当の時間がかかることもあり、

なんとか対象ブックを開かずに正しい更新日時(=前回保存日時)を知りたいと思う次第です。

この回答が役に立ちましたか?

お役に立てず、申し訳ございません。

素晴らしい! フィードバックをありがとうございました。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。

むしろ、BuildinPropertyが正しく更新されていないトラブルでは?

こちらはExcelオブジェクトのPropertyですからお気づきのようにExcelブックを開かないとまともな方法では取得できないと思います。

少なくとも私は存じません。

この回答が役に立ちましたか?

お役に立てず、申し訳ございません。

素晴らしい! フィードバックをありがとうございました。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。

こんにちは。

どうしても"Last save time"が取得したいのであれば、やはり一度ブックを開いてしまうのが手っ取り早いかと思います。
下記コードでは別インスタンスとしてExcelを起動(非表示)して取得しています。

Public Sub Sample()
  With CreateObject("Excel.Application")
    .Visible = False
    With .Workbooks.Open("C:\Test.xlsx")
      MsgBox .BuiltinDocumentProperties("Last save time").Value
      .Close False
    End With
    .Quit
  End With
End Sub

2007以降の新しいファイル形式であれば、Zip展開して中のXMLファイルを参照する方法もあるかもしれませんが…。

2 ユーザーがこの回答を役に立ったと思いました。

·

この回答が役に立ちましたか?

お役に立てず、申し訳ございません。

素晴らしい! フィードバックをありがとうございました。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。

>>y sakuda様

>>むしろ、BuildinPropertyが正しく更新されていないトラブルでは?

 

そういった方面の可能性もあるのですね。さすがにそうなると根本の原因を探すことも難しそうです。

当面は先に記した方法でしのごうと思います。

 

y sakuda様、ご丁寧に付き合って頂き、ありがとうございました。

この回答が役に立ちましたか?

お役に立てず、申し訳ございません。

素晴らしい! フィードバックをありがとうございました。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。

 
 

質問情報


最終更新日: 2024年4月25日 表示数 9,360 適用先: