学习VBA,报表做到飞 第五章 事件篇 5.6 Worksheet_Change事件

学习VBA,报表做到飞 第五章 事件篇 5.6 Worksheet_Change事件

编码文章call10242025-03-23 17:23:5934A+A-

第五章 事件篇

5.6 Worksheet_Change事件

这是一个工作表事件,当代码所在的工作表的内容被修改时,触发该事件。

我们先来看一下这个事件的语句结构:

Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

这个事件有一个变量Target,它是一个单元格变量,它代表被修改的单元格。我们对一个单元格所做的修改内容,就会赋值给这个变量。下面我们通过一个案例来学习这个事件的应用。

我们想录入一个如下图所示的学生选修专业统计表,学生可选修的专业有概论、数理统计、VBA语言和PASCAL语言,如果我们在选修专业单元格里直接录入这些内容,由于学生人数众多,录入工作量会非常大。我们用数字1来代表概论,2代表数理统计,3代表VBA语言,4代表PASCAL语言,在选修专业单元格里直接录入学生选修专业所对应的数字,单元格会自动录入选修专业,这样就可以大大减轻我们的工作量了。

**系学生选修专业统计表

序号

学生姓名

选修专业




























Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column <> 3 Or Target.Count > 1 Then Exit Sub

Application.EnableEvents = False

If Target = 1 Then

Target = "概论"

ElseIf Target = 2 Then

Target = "数理统计"

ElseIf Target = 3 Then

Target = "VBA语言"

ElseIf Target = 4 Then

Target = "PASCAL语言"

Else

MsgBox "请输入1-4之间的数字"

Target = ""

End If

Application.EnableEvents = True

End Sub

我们先看一下小程序开头的这条语句:

If Target.Column <> 3 Or Target.Count > 1 Then Exit Sub

它的意思是,如果我们修改的单元格不在第3列,或者同时修改两个以上单元格,那么就会退出程序,这样就可以对表格的哪块区域修改能让该事件正确响应做了一个限定。

接下来的程序里,如果一个单元格输入1,VBA会自动给该单元格赋值“概论”,输入2则赋值“数理统计”,3赋值“VBA语言”,4赋值“PASCAL语言”。

那么,我们为什么还要对EnableEvents属性进行更改呢?

如果没有

Else

MsgBox "请输入1-4之间的数字"

Target = ""

这条语句,我们是不需要对EnableEvents属性进行更改的。有了这条语句,假如我们输入了5,VBA会弹出对话框并对单元格赋值为空,而对单元格赋空值则又触发了该事件响应,它判断输入的不是1-4之间的数字,又会弹出对话框并对单元格赋值为空。这样就会一直弹出对话框,陷入了一个死循环。所以在该事件正确响应后,我们先把EnableEvents属性设置为False,确保该段代码执行完毕前不再触发Worksheet_Change事件,待程序把数据处理完毕后,程序结束前,把EnableEvents属性再设置为True,等待下一次输入能够再次触发Worksheet_Change事件。

程序执行的效果是这样的:


往期精彩回顾:

学习VBA,报表做到飞 第五章 事件篇 5.5 Workbook_BeforePrint事件

学习VBA,报表做到飞 第五章 事件篇 5.4 Workbook_NewSheet事件

学习VBA,报表做到飞 第五章 事件篇 5.3 Workbook_BeforeClose事件



我是云飞扬,职场财会人员,愿与大家分享表格制作和数据统计分析的技巧与方法,希望大家的工作更便捷,更轻松!

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4