【VBA研究】如何用VBA读取文件的日期时间

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iamlaosong/article/details/81327478

iamlaosong文

文件的日期时间分创建时间和修改时间,文件一旦创建,创建时间就定下不变了,所以日常应用中一般都是取修改时间,我的一个应用(生成二维码)中就是取这个时间判断图片文件是否重新生成。

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(最后访问时间)给禁用了。只有在修改文件时,才会顺便更新访问时间。

下图是各个文件系统对时间的支持情况:

* 默认禁用是可以打开的,命令如下(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

猜你喜欢

转载自blog.csdn.net/iamlaosong/article/details/81327478
vba
今日推荐