使用VBA生成滿足條件的日期
在Excel中,有時(shí)我們需要根據(jù)輸入的數(shù)值來自動(dòng)記錄當(dāng)前的時(shí)間。本文將介紹如何使用VBA編寫程序,在A-C列的單元格輸入數(shù)值后,對(duì)應(yīng)的D-F列記錄當(dāng)前的時(shí)間,并且如果輸入為空白或者不是數(shù)值,則對(duì)應(yīng)的單
在Excel中,有時(shí)我們需要根據(jù)輸入的數(shù)值來自動(dòng)記錄當(dāng)前的時(shí)間。本文將介紹如何使用VBA編寫程序,在A-C列的單元格輸入數(shù)值后,對(duì)應(yīng)的D-F列記錄當(dāng)前的時(shí)間,并且如果輸入為空白或者不是數(shù)值,則對(duì)應(yīng)的單元格保持空白。
VBA程序編寫思路
首先,我們需要使用到""事件,在改變單元格內(nèi)容時(shí)觸發(fā)VBA程序運(yùn)行。下面是具體的步驟:
1. 打開Excel表格,在工作表標(biāo)簽"Sheet1"上單擊右鍵,選擇"查看代碼"。
2. 在VBA編輯器的Sheet1代碼框里輸入以下程序代碼:
```vba
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ro, co, bo
' 忽略運(yùn)行過程中可能出現(xiàn)的錯(cuò)誤
On Error Resume Next
' 開啟代碼只執(zhí)行一次
Application.EnableEvents False
' 定義工作表
Set mysheet1 ("Sheet1")
' 獲取改變的單元格的行號(hào)和列號(hào)
ro
co
' 改變的單元格是否為數(shù)值
bo IsNumeric(Target)
' 如果改變的單元格不為空白,在A-C列,且是數(shù)值
If Target <> "" And co < 3 And bo True Then
' 設(shè)置單元格的時(shí)間格式
mysheet1.Cells(ro, co 3).NumberFormatLocal "yyyy-mm-dd hh:mm:ss"
' 把時(shí)間寫入單元格
mysheet1.Cells(ro, co 3) Now()
End If
' 如果改變的單元格在A-C列且為空白或者不是數(shù)值
If co < 3 And (Target "" Or bo False) Then
' 清空對(duì)應(yīng)單元格的日期
mysheet1.Cells(ro, co 3) ""
End If
' 恢復(fù)代碼只執(zhí)行一次
Application.EnableEvents True
End Sub
```
使用VBA生成滿足條件的日期
回到Sheet1的工作表界面,在A-C列的單元格里輸入數(shù)據(jù)時(shí),將會(huì)在D-F列對(duì)應(yīng)的單元格記錄日期和時(shí)間。
VBA程序注意事項(xiàng)
1. 使用""事件時(shí),每改變一個(gè)單元格可能會(huì)執(zhí)行多次,所以要在代碼中引入"Application.EnableEvents False",以確保只執(zhí)行一次。
2. 單元格的時(shí)間格式可以事先在工作表上設(shè)置好,也可以在程序中進(jìn)行設(shè)置。如果單元格未設(shè)置成時(shí)間格式,其顯示的結(jié)果可能是一串?dāng)?shù)字。
3. 使用"IsNumeric"判斷單元格內(nèi)容是否為數(shù)字時(shí),空白單元格也會(huì)被默認(rèn)成是數(shù)字,此時(shí)需要排除掉它們。