如何实现刚才提到的场景需求呢?此时可以利用工作表的Change事件结合工作表的CountIf 函数来判断所录入的人员编号是否重复,本例子中将要用到的知识点如下:n Worksheet_Change 事件:当用户更改工作表中的单元格,或外部链接引起单元格的更改时发生此事件。n ByVal Target As Range:其中Target是必须的,Range可以是多个单元格。byval 的意思是定义的形式参数“按值传递”,Target 是形参的名称,可以定义成自己喜欢的名字,包括默认的事件处理过程中,As Range 是这个形参的类型,也就决定了对应的要传递进来的实参的类型,可以是普通变量,比如 As Single ,As Integer, As Double, 也可以是对象变量,As Worksheet,As Range等这里的As Range 规定类型是单元格区域对象 RangenApplication.EnableEvents 的作用是控制事件的触发。当 Application.EnableEvents 设置为 False 时,禁止触发事件发生。当 Application.EnableEvents 设置为 True 时,可以正常触发事件,excel默认状态。n工作表的CountIf 函数计算区域中满足给定条件的单元格的个数。 CountIf 函数语法如下:COUNTIF(range, criteria)参数range为需要计算其中满足条件的单元格数目的单元格区域。参数criteria为确定哪些单元格将被计算在内的条件,其形式可以为数字、表达式、单元格引用或文本。
2 限制重复值录入的代码
下面我们看看示例代码如下。 Private Sub Worksheet_Change(ByVal Target As Range) '51 利用VBA代码,限制重复值的录入 With Target If .Column <> 1 Or .Count > 1 Then Exit Sub If WorksheetFunction.CountIf(Range("A:A"), .Value) > 1 Then .Select MsgBox "不能输入重复的人员编号!", 64 Application.EnableEvents = False .Value = "" Application.EnableEvents = True End If End WithEnd Sub 代码窗口: 代码解析:工作表的Change事件过程,使A列单元格只能录入唯一的人员编号。a) 第4行代码使用工作表的CountIf 函数来判断在A列单元格输入的人员编号是否重复。在示例中以所录入的人员编号与A列单元格区域进行比较,如果CountIf 函数的返回值大于1,说明录入的是重复编号。b) 第5行代码,重新选择该单元格,便于下一步清空后重新录入。c) 第7、8、9行代码,清除录入的重复编号,在清除前将Application对象的EnableEvents属性设置为False,禁止触发事件。因为如果不禁用事件,那么在清除重复值的过程中会不断地触发工作表的Change事件,从而造成代码运行的死循环。 经过以上的设置,在工作表的A列中只能录入唯一的人员编号,如果录入重复值会进行提示。当录入的值重复时:弹出对话框:当点确定后,原先录入的重复的数值2被清除掉。 今日内容回向:1 如何可以做到不重复录入?(本例是判断CountIf 函数的返回值,如果大于1,说明录入的是重复编号)2 采用VBA代码做到不重复录入时需要哪些知识点? 本讲内容参考程序文件:VBA代码解决方案修订(49-98).xlsm 我20多年的VBA实践经验,全部浓缩在下面的各个教程中:【分享成果,随喜正能量】人生苦短,世事无常。何必事事那么在乎,更不必处处那么计较。人这一辈子,不过百年,没必要过分苛求什么,奢望什么,做你想做的,爱你想爱的,努力过好每一天,闲看庭前花开花落,远望天边云卷云舒。苛求太多,烦恼就多,奢望太多,痛苦更甚。。