除非注明,文章均为 战战如疯 原创,转载请保留链接: http://www./cat4/231.html,VBA交流群273624828。 今天来看一个Change事件应用的例子。在工作中我们有时候需要下面的业务人员填一些报表给我们,但由于每个人掌握Excel的水平参差不齐,所以经常会有人报上来的报表存在一些问题。比如我所在的公司是一个理财公司,每次业务人员报上来的报表里都会有金额和日期这两栏。大家都知道金额应该是数值格式才可以做求和等计算,日期必须是日期格式才可以进行按年按月筛选汇总等工作,有些业务员由于不明白这一点,往往会将本应该是数值的单元格弄成文本格式,如果我直接拿来对数据汇总会造成数据的丢失。而对于日期的填写一些业务员不会自定义格式来设置日期格式,就采取了加单撇号的方法来强制转换成日期格式,比如“ 'YYYY-MM-DD”这种格式,造成不能直接筛选。那现在我们来看看怎么通过Excel VBA来限制对应单元格的输入格式。假设我们限制只能在A列输入数值,只能在B列输入日期,看代码:
在上面的代码中Application.IsNumber是判断相应单元格的值是不是数值,是返回TRUE,不是返回FALSE。IsDate是VBA函数,用来判断相应值是不是日期,但是存在一个情况就是这个函数会将文本格式的日期也判断为日期,比如我们上面说的用单撇号强制转换的日期,上面说过这种日期不符合要求,所以又加了个IsNumber来判断是不是数值,既是日期又是数值的输入模式才符合我们的要求。 在我们的代码中Target=""是将不符合条件的单元格变为空,但是问题来了,如果执行了这句代码相当于又给单元格变了值了,就又会引发Change事件,这样的话就进入一个死循环了。所以这里用到了Application.EnableEvents = False表示程序不再响应事件,所以Target=“”不会引发新的Change,当然执行完Target=“”后还要用Application.EnableEvents = True将响应事件功能恢复,否则以后的事件也不会被响应了。 本节示例文件下载:http://pan.baidu.com/s/1bnEPToz。 |
|