まりふのひと

Excel VBA のヘルプがヘルプになっていないッ!

「まめ録」に過去のデータが取り込めるよう、「ファイルの作成日時をカレンダーの日付にしよう」と思い、get作成日時 という関数を作った。更新日時だと変わる可能性があるからだ。

Public Function get作成日時(argFullPath) As Date
On Error GoTo Err_get作成日時
Dim mbTitle As String
Dim FSO
Dim fullPath As String
    
    mbTitle = MYObjName & "/get作成日時"
    Set FSO = CreateObject("Scripting.FileSystemObject")
    STRAns = FSO.GetFile(argFullPath).DateCreated
    If IsDate(STRAns) Then
        DATAns = CDate(STRAns)
        get作成日時 = DateSerial(Year(DATAns), Month(DATAns), Day(DATAns))
    Else
        get作成日時 = 0
    End If
    
Exit_get作成日時:
    Exit Function
    
Err_get作成日時:
    MsgBox Err.Number & "/" & Err.Description, vbCritical, mbTitle
    Resume Exit_get作成日時
End Function

失敗したばかり。コピーを作り、動作検証して気が付いた。更新日時 < 作成日時 なのである。

コピーした日が作成日時になっている‥‥

WindowsXP の言い分も理解できるが、困ったなぁ〜
Excel VBA のヘルプを調べたら、

LastUpdate で更新日時が取得出来ることがわかったので、「小さいほうを採る」ように修正した‥‥ ら、

‥‥ しばし聞き入る(Ctrl+クリック) ‥‥


“FSO 更新日時” でググる

 Office TANAKA - Excel VBA FileSystemObject [Fileオブジェクト]

プロパティAttributesファイルの属性を設定します
DateCreatedファイルが作成された日付と時刻を返します
DateLastAccessedファイルが最後にアクセスされたときの日付と時刻を返します
DateLastModifiedファイルが最後に更新されたときの日付と時刻を返します
Driveファイルが存在するドライブの名前を返します
Nameファイルの名前を返します
ParentFolderファイルが存在するフォルダを返します
Pathファイルのパスを返します
ShortNameファイルの8.3形式の名前を返します
ShortPathファイルの8.3形式のパスを返します
Sizeファイルのサイズを返します
Typeファイルの種類を返します
メソッドCopyファイルをコピーします
Deleteファイルを削除します
Moveファイルを移動します

 結果

Excel VBA のヘルプにあった LastUpdate は間違いッ!
DateLastModified に変更し、関数を完成させた。

Public Function get作成日時(argFullPath) As Date
On Error GoTo Err_get作成日時
Dim mbTitle As String
Dim FSO
Dim datCreate As Date, datUpdate As Date
Dim strCreate As String, strUpdate As String
    
    mbTitle = MYObjName & "/get作成日時"
    Set FSO = CreateObject("Scripting.FileSystemObject")
    strCreate = FSO.GetFile(argFullPath).DateCreated
    If IsDate(strCreate) Then
        datCreate = CDate(strCreate)
        datCreate = DateSerial(Year(datCreate), Month(datCreate), Day(datCreate))
    End If
    strUpdate = FSO.GetFile(argFullPath).DateLastModified
    If IsDate(strUpdate) Then
        datUpdate = CDate(strUpdate)
        datUpdate = DateSerial(Year(datUpdate), Month(datUpdate), Day(datUpdate))
    End If
    If datCreate > datUpdate Then
        get作成日時 = datUpdate
    Else
        get作成日時 = datCreate
    End If
    
Exit_get作成日時:
    Set FSO = Nothing
    Exit Function
    
Err_get作成日時:
    MsgBox Err.Number & "/" & Err.Description, vbCritical, mbTitle
    Resume Exit_get作成日時
End Function