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

  • 質問

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


    • 編集済み sakuraxx 2014年5月30日 23:26
    2014年5月29日 1:09

回答

  • 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-----------------------------------------------
    以上



    • 編集済み sakuraxx 2014年5月30日 8:45
    • 回答としてマーク sakuraxx 2014年5月30日 8:47
    2014年5月29日 20:31
  • gekkaさん、この度は大変お世話になりました。…感謝…感謝
    掲題の件は、
    DateValueを使わないで、単に文字列として記述する事で解決できました。
    prop.Value = DateValue("2000/01/01 23:11:01")
                ↓↓
    prop.Value = "2000/01/01 23:11:01"
    以上

    • 回答としてマーク sakuraxx 2014年5月30日 8:47
    2014年5月30日 8:40

すべての返信

  • こんな

    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月29日 11:03
  • 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-----------------------------------------------
    以上



    • 編集済み sakuraxx 2014年5月30日 8:45
    • 回答としてマーク sakuraxx 2014年5月30日 8:47
    2014年5月29日 20:31
  • 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!)

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

    • 回答としてマーク sakuraxx 2014年5月30日 8:47
    2014年5月30日 8:40