【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(最後訪問時間)給禁用了。只有在修改檔案時,才會順便更新訪問時間。
下圖是各個檔案系統對時間的支援情況:
* 預設禁用是可以開啟的,命令如下(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