Change事件看起來並不複雜,但是在很多應用場景,都會用到Change事件,並且可以給大家帶來很多工作上的便利性。
例如很多用戶都希望能夠保存單元格內容的修訂記錄,但是靠人工記錄下來這個修改過程,確實有些繁瑣,合理使用Change事件,就可以實現這個功能,修訂記錄保存在單元格批註中。
當前數據表內容如下所示。
現在做如下修改:
Math_05 => CS_01
Tom => Jerry
修改後工作表如下圖所示,修訂記錄自動添加到批註中。
示例代碼如下。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strCmt As String
Application.EnableEvents = False
With Target
If .Count = 1 Then
Application.DisplayAlerts = False
On Error Resume Next
strCmt = .Comment.Text
If Err.Number > 0 Then
strCmt = Date & "-" & .Value
.AddComment strCmt
Else
strCmt = strCmt & Chr(10) & Date & "-" & .Value
.Comment.Text strCmt
End If
On Error GoTo 0
Application.DisplayAlerts = True
End If
End With
Application.EnableEvents = True
End Sub
【代碼解析】
第3行代碼禁用系統事件激活。
第5行代碼判斷是否只是修改了單個單元格。
第6行代碼禁止顯示告警。
第7行代碼忽略錯誤繼續執行。
第8行讀取單元格的註釋,如果單元格中沒有註釋,那麼第9行代碼進行錯誤捕獲。
第10行代碼爲生成批註內容。
第11行代碼爲單元格添加批註。
如果單元格已經存在批註,那麼第13和14行代碼將在批註中追加單元格的最新值。
第16行恢復系統的錯誤處理機制。
第17行恢復系統錯誤顯示。
第20行代碼啓用系統事件激活。