如何自定義函式引用檔案建立時間@張志晨之經驗?

  一位朋友製作了一個Excel模板,其中有這樣一個功能,在A1單元格有這樣的公式:

    =TEXT(IF(H4<>0,TODAY(),IF(J4<>0,TODAY(),"")),"m月d日")

  他的目的很明顯,是想在第一次錄入資料自動記錄這個時間,而且以後也不要改變。可是事與願願,以後每次開啟電子文件,這個時間都變。他問我,如何才能讓錄入顯示的時間不隨系統時間的變化而變化?

工具/原料

windosw7.0 + Excel2013

方法/步驟

價值與問題分析:

  說真的,這個創意真的很好,一勞永逸。對於公司使用的、內容和格式都固定不變的報表而言,做成模板,是個很不錯的選擇。如果只是單個的文件就沒有價值了。

  但這個公式有問題:

  一是不簡明,用了巢狀的條件語句。可改為:=TEXT(IF( OR( J4<>0,H4<>0),TODAY(),""),"m月d日")

  二是使用的函式不對。TODAY()返回的是系統的當前,這個函式的優點就是在於“當前”,具有可變性。而這位朋友需要的是不變化的時間。那麼怎麼辦?

改變思路:

  換個思路。思路決定出路!用自定義函式。只有檔案的建立時間是不變的,所以呼叫這個時間就可以了。這能辦到嗎?只有想不到的,沒有做不到的。

建立自定義函式:

在VBA(Module1塊)中寫程式碼:

Function cTime()
Dim fso, f1
Dim p As String, n As String, str As String

p = ThisWorkbook.Path
n = ThisWorkbook.Name

If Right(p, 1) = "\" Then
str = p & n
Else
str = p & "\" & n
End If

Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.GetFile(str)
cTime = f1.DateCreated‘這句呼叫檔案建立時間,並返回

End Function

如何自定義函式引用檔案建立時間@張志晨之經驗

儲存成啟用巨集的模板:

把此檔案“另存為”模板就可以了。

以後就可以基於這個模板建立新文件了。

按下圖的程式操作。在圖片中,我的示例是將模板儲存在F:\sof資料夾中。

如何自定義函式引用檔案建立時間@張志晨之經驗

建立新文件:

我們基於這個模板建立一個新文件,儲存在桌面,檔名:Test.xlsx

在A1中輸入公式:

=TEXT(IF(OR(H4<>0, J4<>0),cTime(),""),"m月d日")

意思是,如果目標單元格有數字,且不為0,就顯示檔案建立時間。用Text函式確定顯示方式:m月d日。檔案建立時間由自定義函式cTime()返回。

如何自定義函式引用檔案建立時間@張志晨之經驗

回車可見效果:

如何自定義函式引用檔案建立時間@張志晨之經驗

補充:模板和新文件的樣式

  此後,你無論什麼時間開啟基於這個模板建立的文件,這個最初的錄入資料的時間不會隨系統的時間而改變了。

如何自定義函式引用檔案建立時間@張志晨之經驗

注意事項

  如果你的電腦中了病毒,病毒把你的文件建立時間改變了,這個辦法就不好用了。可惡的病毒呀……

相關問題答案