close

寫了一個自訂函數,負責取得活頁簿(XLS 檔)最後存檔時間。

設計的時候考慮到自訂函數是不會自動更新的,因此在用的時候輸入 TODAY()、NOW() 之類會經常自動計算的函數,整個活頁簿中有異動的時候,這個函數也就會因為它裡頭包的內容異動了而跟著執行一次。

今天一開始在 Excel 2007,還一度找不到要去哪裡編輯 VBA,好險有快速鍵:Alt-F11。打開一個 Excel 檔案,按下 Alt-F11 叫出 Visual Basic 編輯器,左手邊「專案」視窗中,會看到目前開啟的 Excel 檔案這個專案底下掛了哪些東西。在「專案」視窗按滑鼠右鍵→「插入」→「模組」,就可以開始編輯以下程式碼了。

 

 

' 利用傳入 Today() 函數的值,讓自訂函數能和 Today() 函數一樣經常重新計算
' 函數名稱:EDITTIME
' 傳入值型態:日期

Function EDITTIME(filedate As Date)
    ' 從現在開啟的這個 Excel 檔案 (ThisWorkbook) 的屬性,
    ' 取得此檔案的 BuiltinDocumentProperties 屬性值中的「Last Save Time(上次修改時間)」,

    EDITTIME = ThisWorkbook.BuiltinDocumentProperties("Last Save Time")
    ' 也可以利用這個屬性取得上次列印日期 (Last Print Date)、最後編輯者 (Last Author) 等等檔案資訊
End Function


寫好馬上就可以用了,使用的時候不需要執行編譯,就只要在儲存格裡輸入=EDITTIME(TODAY()),儲存格內容就會出現程式裡指定回傳的檔案最後存檔時間。如果時間以數值方式顯示,請對該儲存格按右鍵→「儲存格格式」,在「數值」頁籤利用自訂來改變 Date 顯示的樣式。像我就設成「yyyy/mm/dd hh:mm:ss AM/PM」。



此外,除了利用 BuiltinDocumentProperties 這個屬性取得檔案最後存檔時間,也可以利用 FileDateTime 函數加上檔案路徑取得你的檔案建立或修改時間。因此可以改寫成這樣:

' 利用 FileDateTime(filepath) 取出檔案最後存檔時間
Function EDITTIME(filedate As Date)
    EDITTIME = FileDateTime(ActiveWorkbook.Path)
End Function


如果你寫的自訂函數不會自動更新,你也可以按 Ctrl-Alt-F9 手動重新計算整本活頁簿中的值。



不過想想又覺得我這種做法好像有點怪,找了一下,在這個討論串中看到「揮發性函數」的說法,於是又試著加入了 Application.Volatile 改寫原來的函數:

' 函數名稱:EDITTIME
' 傳入值:無
Function EDITTIME()
    Application.Volatile

    ' 傳入檔案路徑,取得該檔案的建立或最後修改時間
    EDITTIME = FileDateTime(ActiveWorkbook.Path)
End Function


使用的時候就只要在儲存格裡輸入:「=EDITTIME()」,就可以了。現在,編輯工作表中任意儲存格,EDITTIME() 也會自動更新囉!

arrow
arrow
    全站熱搜

    小攻城師 發表在 痞客邦 留言(2) 人氣()