很多时候,我们的源数据,也就是俗称的明细,由于种种原因肯定不能一成不变的,需要改动。而作为数据处理人员,无论是数据库还是我们用Excel处理,往往都会有这样的一个概念——保留修改痕迹。
修改痕迹对于数据管理是很重要的,例如:数据找回,纠错依据,最新数据统计等等吧。今天就有一个朋友有这样的需求,需要在被修改的记录条所在行上,标注出修改的日期。这个一点都不难,典型的change事件的思路解决问题,来看一下代码吧。
Private Sub Worksheet_Change(ByVal TargetAs Range)
‘target就是代表了被选中的单元格
a =Target.Row ‘修改的单元格的行号
Range("A" & a) = date ‘A列对应行号的单元格,用date函数赋值。
End Sub
不要急于去测试,给予大家可以复制代码的机会,那不是作者的风格。这个代码本身是没有问题的,但是change事件有一个及其不好的情况,就像Do…Loop循环一样,稍不留神,会陷入死循环。这是由于代码中一个单元格发生了change,会导致另外的单元格也会change,多米诺效应导致了这种死循环的产生。
不急,解决起来很简单。为了起到明显的效果,将代码中的date函数改为time函数,再来看一下修改后的代码吧。
搞定了!
Application的EnableEvents属性就是用来规避死循环的利器。看一下效果吧。
作者云:
有时候感觉很复杂的问题,用vba处理起来并不是那么麻烦,反而简单,那为什么不学呢。
编后语:
这是一个小例子,起到了一个示范的过程也就是了。在实际工作中,数据可能要更加复杂,但是大体的规律仅在于此,举一反三是学习的重要方法之一。
领取专属 10元无门槛券
私享最新 技术干货