次の方法で共有


(VBA) プロパティの「コンテンツの作成日時」を更新するには

質問

2014年5月29日木曜日 1:09

Excelファイル名をマウス右クリック(ショウトカットメニュー)した時の[プロパティ]を選択して、
プロパティ画面の⇒[詳細]タブ⇒[プロパティ]⇒[マネージャー]の
・コンテンツの作成日時
・前回保存日時
・前回印刷日時
を任意の指定日時に、Excel-VBAで更新したいのですが、
非力な私には、そのコードが解りません??。
サンプルコードを提示いただければ大助かりなのですが、
ご教授宜しくお願い致します。
以上

すべての返信 (4)

2014年5月29日木曜日 20:31 ✅回答済み

gekkaさん、早々のご回答有難うございます。
試行錯誤にて下記の様に工夫をしてみました。
ご指摘の様に「前回保存日時は」結果として指定日時で保存する事はできませんでした…あきらめます。

Sub TestUpdateDocumentDate1()
    Const Target As String = "D:\Temp\Book01.xls"
    With Workbooks.Open(Target)
        Debug.Print Target
        '
        Dim prop As Object
        Dim book As Workbook
        Set book = ActiveWorkbook
        For Each prop In book.BuiltinDocumentProperties
            If (prop.Type = msoPropertyTypeDate) Then
                If (prop.Name = "Last print date") Then '①前回印刷日
                    prop.Value = "2000/01/01 23:11:01"
                ElseIf (prop.Name = "Creation date") Then '②コンテンツの作成日時
                    prop.Value = "2000/01/02 23:22:02"
                 ElseIf (prop.Name = "Last save time") Then '③前回保存日(あとで保存したら、その日時が記録されます)
                    prop.Value = "2000/01/03 23:33:03"
                End If
                Debug.Print prop.Name & vbTab & prop.Value
            End If
        Next
        '
        .Close SaveChanges:=True
    End With
End Sub
以上


2014年5月30日金曜日 8:40 ✅回答済み

gekkaさん、この度は大変お世話になりました。…感謝…感謝
掲題の件は、
DateValueを使わないで、単に文字列として記述する事で解決できました。
prop.Value = DateValue("2000/01/01 23:11:01")
            ↓↓
prop.Value = "2000/01/01 23:11:01"
以上


2014年5月29日木曜日 11:03 | 1 票

こんな

Sub TestUpdateDocumentDate()
    Dim book As Workbook
    Set book = ActiveWorkbook
    Dim prop As Object
    For Each prop In book.BuiltinDocumentProperties
        If (prop.Type = msoPropertyTypeDate) Then
            If (prop.Name = "Last print date") Then
                '前回印刷日
                prop.Value = DateValue("2001/1/1 00:00")
            ElseIf (prop.Name = "Creation date") Then
                'コンテンツの作成日時
                prop.Value = DateValue("2014/12/31")
            ElseIf (prop.Name = "Last save time") Then
                '前回保存日(あとで保存したら、その日時が記録されます)
                prop.Value = DateValue("2099/12/31 23:59")
            End If
            Debug.Print prop.Name & vbTab & prop.Value
        End If
    Next
    'Call book.Save
End Sub

VBAから変更できますけど、そのあとでそのファイルを保存してしまったら、「前回の保存日時」は保存した日時になってしまいます。

「前回の保存日時」も変更して保存したい場合はEXCEでファイルを開かずに、なにがしかの外部ライブラリを使って無理やり更新する必要があります。(NPOIとかXSSFとか)

個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)


2014年5月30日金曜日 3:58 | 1 票

DateValue関数は年月日のみを変換します。
時刻部分はTimeValue関数を使います。
あるいはCDate関数で一度に変換もできます。

prop.Value = DateValue("2001/1/1 00:00") ; TimeValue("23:30:00")
prop.Value = CDate("2099/12/31 23:59")

個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)