「購買學習資料的請加我微信:18622923987,或者直接淘寶:
http://item.taobao.com/item.htm?id=535497942585
購買教材的朋友將會得到小編獨家珍藏VBA視頻與同步學習資料,並另加送一份以往文章的電子版教材,而且小編還會提供終身免費學習諮詢的服務「」
當工作表單元格數值被修改後,就會觸發Worksheet的Change事件,我們可以通過寫一些語句響應這個事件來完成一些工作,下面我們通過一些例子來認識它。
打開一個工作薄,點擊工作表名稱標籤,選擇「查看代碼」命令進入VBE編輯窗口,在代碼窗口的對象列表中選擇「Worksheet」,在事件列表中選擇「Change」,這時代碼窗口中會出現一段代碼:
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
相關說明:
1、Worksheet是對象名,Change是事件名稱,對象名稱和事件名稱用下劃線連接;
2、(ByVal Target As Range):括號裡的是程序運行傳遞的參數,Target是一個Range對象,即單元格區域,指觸發Change事件的單元格,也就是數值被修改了的單元格。
3、我們只需要將所需要執行的代碼寫在Sub與End Sub之間,這樣,在工作表的某個單元格發生改變時,就自動執行Sub與End Sub之間的程序代碼。
如果我們需要在每一次單元格修改之後都告訴我們這個單元格的地址是多少,則代碼可以為:
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "剛剛修改的單元格地址是:" & Target.Address
End Sub
這裡所用的target就是你修改過的那個第一個的意思(呵呵,我是這麼理解的)。
這樣,當我們修改了某個單元格後,都會自動彈出一個對話框告訴我們剛剛修改的格的地址是多少。
如果我們想只有修改某個單元格區域,比如D列的單元格的時候,才彈出這個對話框告訴我們,也是可以的,那代碼為:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 4 Then '當改變的單元格的列號為4,即為D列時執行程序
MsgBox "剛剛修改的單元格地址是:" & Target.Address
End If
End Sub
有時,為了減少工作表信息的輸入工作,我們會利用到Worksheet的Change事件,例如有一相記錄學生借書或還書情況的工作表,C列2行以下的區域記錄圖書「借出」或「歸還」的情況,需要在每一次更改「借出」或「歸還」狀態時,都在同行的D列記錄下更改的日期,則代碼可以為:
Private Sub Worksheet_Change(ByVal Target As Range)
'當被修改的單元格只有一個,且列號等於3,行號大於2時執行程序
If Target.Count = 1 And Target.Column = 3 And Target.Row > 2 Then
Target.Offset(0, 1) = Date '被修改的單元格的右面一個單元格的值為當前日期
End If
End Sub
曾經有好幾個人問我如何實現當你在某一第一個輸入數據的時候,其他列就會自動輸入,看了上面的講解您是否明白了?
例如,有一張表,第一列為日期,第二列為姓名,第三列為班級,當我把姓名和班級都輸入好了之後(當然肯定會有一列當做觸發機關,我們就以最後輸入班級為例)日期就會自己輸入,怎麼辦呢?看看下面的代碼你就會明白的:
Private Sub Worksheet_Change(ByVal Target As Range)
If cells(target,row,target.column-1)<>"" and target.value<>"" then
cells(target.row,target.column-2) = Date
End If
End Sub