EVBA:change事件被修改的记录条添加更改日期

很多时候,我们的源数据,也就是俗称的明细,由于种种原因肯定不能一成不变的,需要改动。而作为数据处理人员,无论是数据库还是我们用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处理起来并不是那么麻烦,反而简单,那为什么不学呢。

编后语:

这是一个小例子,起到了一个示范的过程也就是了。在实际工作中,数据可能要更加复杂,但是大体的规律仅在于此,举一反三是学习的重要方法之一。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181107A1A7NJ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券