Worksheet的Change事件
“事件”在前面的贴子里我们已经接触过了,如果你还不清楚,回过头去花上几分钟看一看。
当工作表单元格数值被修改后,就会触发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
这样,当我们修改了某个单元格后,都会自动弹出一个对话框告诉我们刚刚修改的格的地址是多少。
如果我们想只有修改某个单元格区域,比如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