【VBA研究】如何用VBA读取文件的日期时间
日期和时间分为创建时间和修改时间。一旦文件被创建后,创建时间也随之固定不变。因此,在日常应用中,通常会采用修改时间为依据来判断文件是否更新。在生成二维码的应用中,则是通过比较最近的修改时间和上一次记录的时间差来判断图片文件是否需要重新生成。
1、取文件的修改时间VBA有专门的函数FileDateTime,如下面的语句:
PicName = ThisWorkbook.Path & "\YiCode.bmp"
t_now = Now()
tim1 = Timer
GenPic = "Fail"
'此处省略。。。。。
Do While Timer < tim1 + 5 '5秒内文件日期没变化则编码失败
If t_now <= FileDateTime(PicName) Then
GenPic = "OK"
UpdatePic
Exit Do
End If
Loop
2、如果必须取文件的创建时间,则需要用到文件系统对象了,其属性:
DateCreated 属性
提供指定文件或文件夹创建日期和时间的详细信息。
DateLastModified属性
记录指定文件或文件夹最后修改的时间信息。
DateLastAccessed属性
提供指定文件或文件夹最后访问的时间信息。
3、关于这三个时间的几个问题
1)文件创建时间和修改时间一致的问题。这是因为文件是在编辑完成之后才保存的,所以创建时间和修改时间是一致的,就像你用word敲了一篇稿子,敲完后保存成文件,这时候文件的创建时间和修改时间是一致辞的,如果你再没有打开过这个文件,那么连访问时间也是一致的。
2)文件创建时间晚于修改时间的问题。这个创建时间是指文件在你的电脑上创建的时间,而并非该文件最初产生的时间,最简单的,你把文件复制一份,看看创建时间,是不是在修改时间之后?答案是肯定的。
3、关于文件的访问时间。这个时间现在和修改时间一致,当初定义的这个访问时间是跟着访问修改的(访问不只是只读不写,查看目录属性也是访问),但随着硬盘的增大,文件的增多,几十万个文件都是常事,如果读操作再加一个写操作,那么这个确实会影响电脑的性能,用户体验也不好,所以从 XP2003 SP1起,为了性能,默认把LastAccessTime(最后访问时间)给禁用了。只有在修改文件时,才会顺便更新访问时间。
下图是各个文件系统对时间的支持情况:

- 预设情况下,默认将LastAccessTime标记为可访问。
- 命令如下(可开启LastAccessTime使用0,关闭则使用1):
fsutil behavior set disablelastaccess 0

4、提取文件的这些属性,看下面例子:
Sub Command1_Click()
Application.ScreenUpdating = False
Set fso = CreateObject("Scripting.FileSystemObject")
strfile = Application.InputBox("请输入文件的完整名称:", "请输入文件的完整名称:", , , , , , 2)
Set objfile = fso.GetFile(strfile)
If fso.fileexists(strfile) Then
sReturn = "文件属性: " & objfile.Attributes & vbCrLf
sReturn = sReturn & "文件创建日期: " & objfile.DateCreated & vbCrLf
sReturn = sReturn & "文件修改日期: " & objfile.DateLastModified & vbCrLf
sReturn = sReturn & "文件大小 " & FormatNumber(objfile.Size / 1024, -1)
sReturn = sReturn & "Kb" & vbCrLf
sReturn = sReturn & "文件类型: " & objfile.Type & vbCrLf
MsgBox sReturn
Else
MsgBox strfile & " :不存在"
End If
Application.ScreenUpdating = True
End Sub
