FileDateTime関数
FileDateTime関数は指定したファイルやフォルダやドライブの更新日時を返します。
この更新日時はDate型のため年月日時分秒のデータになります。ミリ秒やマイクロ秒は持っていません。
FileDateTime関数は引数のファイルやフォルダが存在しない場合にエラーになり、処理が止まるため、引数のファイル存在チェックが必須になります。また、日時を文字列に変換するFormat関数も一緒に扱った方が都合がよいです。後述のサンプルコードで説明します。
構文
Function FileDateTime(PathName As String)
PathName | 更新日時を確認したいファイルやフォルダのパスを文字列で指定します。
存在しないパスの場合は実行時エラー53が発生して処理が止まります。 また、パスが不完全な場合は実行時エラー76が発生し処理が止まります。 |
戻り値 | 厳密には戻り値型は規定されていないためVariant型になりますが、実質ではDate型でPathNameで指定されたパスの更新日時が返されます。 |
発生するエラー
FileDateTime関数では主に2つのエラーが発生します。
1つは、FileDateTime関数の引数のパスが存在しない場合に「実行時エラー’53’ ファイルが見つかりません。」が発生します。例えば、ファイル名だけの「abc.txt」だけを引数に指定すると発生します。
もう1つは、FileDateTime関数の引数のパスにファイル名しか指定していないなどでフォルダパスが不完全な場合に「実行時エラー’76’ パスが見つかりません。」が発生します。例えば、本来は「C:\abc\test.txt」のフルパスを「abc\test.txt」のようにドライブや親フォルダが書いてないと発生します。
いずれの場合も、「C:\aaa\test.txt」のようにドライブからファイル名までの正しいフルパスが書いてないことが原因です。
ファイルの更新日時を取得するサンプル
1 2 3 |
Sub FileDateTimeTest0() Debug.Print FileDateTime("C:\aa.txt") End Sub |
実行結果例
2020/01/16 2:32:47
引数のファイルパスが存在していれば、そのファイルの更新日時が返されます。
フォルダやドライブの更新日時を取得するサンプル
1 2 3 4 5 |
Sub FileDateTimeTest1() Dim d As Date d = FileDateTime("C:\abc\testあああ") Debug.Print d End Sub |
実行結果例
2019/12/25 0:58:10
引数のフォルダパスが存在していれば、そのフォルダの更新日時が返されます。
注意点
フォルダパス(ドライブパスも同様)を指定する場合に注意点があります。
それは、フォルダパスの右端にパス区切り文字の「\」や「/」を指定してはいけない、という点です。パス区切り文字が右端にあると「実行時エラー’53’ ファイルが見つかりません。」のエラーになります。
そのため上のサンプルコードの引数の右端に「\」があるとエラーになります。
1 2 3 4 5 |
Sub FileDateTimeTest2() Dim d As Date d = FileDateTime("C:\abc\testあああ\") Debug.Print d End Sub |
引数右端に「\」があるためこれはエラーになります。
FileDateTime関数は引数存在チェックとFormat関数が必須
先に書いたとおり、FileDateTime関数は引数が存在しない場合にエラーになります。また、戻り値がDate型のため、指定フォーマットの文字列で日時を取得したい場合はFormat関数を利用することが必要になります。
以下のサンプルはそれらの問題に対応した関数です。
ファイルパスが存在するかをDir関数で判定しています。
Dir関数でのファイル存在チェックの詳細については「VBAでファイルの存在をチェックする」をご参照ください。
また、ファイルの更新日時を”yyyy-mm-dd hh:mm:ss”の文字列で取得するためにFormat関数を利用しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Sub GetFileTimestamp() Dim filePath As String '// ファイルパス Dim updDateTime As Date '// 更新日時 Dim s As String '// 更新日時文字列 '// ファイルのパスを指定します filePath = "C:\aaa\料理\とり肉の山賊焼き.pdf" ' ファイルの実際のパスに置き換えてください '// ファイルの存在しない場合 If Dir(filePath) = "" Then MsgBox "ファイルが見つかりません。" Exit Sub End If '// ファイルの更新日時を取得 updDateTime = FileDateTime(filePath) '// 指定フォーマットで取得 s = Format(updDateTime, "yyyy-mm-dd hh:mm:ss") Debug.Print s End Sub |
実行結果例
2021-07-31 01:38:40
On Error Resume Nextでエラーを回避する
上のコードのようにファイル存在チェックを入れてエラー回避することをお勧めしますが、「On Error Resume Next」でエラーが発生しても処理を続行するようにすることも可能です。
1 2 3 4 5 6 7 8 9 10 |
Sub FileDateTimeTest4() On Error Resume Next Dim d As Variant d = FileDateTime("C:\aaa\料理\とり肉の山賊焼き.pdf") Debug.Print d If Err.Number > 0 Then Debug.Print Err.Description End If End Sub |