Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2500|回复: 8

[已解决]关于VBA事件,表述方式

[复制链接]
发表于 2014-4-19 00:27 | 显示全部楼层 |阅读模式
关于VBA事件,表述方式

不好表述,画了个图,请老师们帮帮解决下,谢谢大家了!

000317y59kngn4rna4gn5o_jpg_thumb.jpg

关于VBA事件,表述方式.rar (8.32 KB, 下载次数: 8)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-4-19 00:40 | 显示全部楼层
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. 'If Target.Column = 9 And Target.Row > 1 Then

  3.     On Error Resume Next

  4.     If (Not Intersect(Target, Range("G2:G10")) Is Nothing) Then
  5.         Application.EnableEvents = False
  6.         num = Target.Value

  7.         If Len(num) = 0 Then Range("j" & Target.Row & ":l" & Target.Row).Value = "": GoTo quit1

  8.         If Len(Trim(num)) <> 18 Then: GoTo quit1    '号码不是18位,则退出

  9.         yy = Mid(num, 7, 4)    '从第7个字符开始,连续4个字符(以下同理)
  10.         mm = Mid(num, 11, 2)
  11.         dd = Mid(num, 13, 2)


  12.         Cells(Target.Row, "j").Value = DateSerial(yy, mm, dd)
  13.         Cells(Target.Row, "l").Value = "=YEAR(NOW())-YEAR(RC[-2])"
  14.     End If
  15. quit1:
  16.     Application.EnableEvents = True
  17. End Sub
复制代码

评分

参与人数 1 +9 收起 理由
yjwdjfqb + 9 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-4-19 01:22 | 显示全部楼层
hwc2ycy 发表于 2014-4-19 00:40

版主就是这样的,非常感谢,

"=YEAR(NOW())-YEAR(RC[-2])" 这句中的 [-2] 能改在那样的吗,也就是j列的对应单元格


回复

使用道具 举报

 楼主| 发表于 2014-4-19 02:04 | 显示全部楼层
hwc2ycy 发表于 2014-4-19 00:40

If Len(num) = 0 Then Range("j" & Target.Row & ":l" & Target.Row).Value = "": GoTo quit1


这个当, 为 0时,,  这个地方,改是 对应的J单元格  对应的I单元格 为空。 

不是J:I之间的区域为空
麻烦老师改改好吧!

谢谢啦 !
回复

使用道具 举报

发表于 2014-4-19 08:17 | 显示全部楼层    本楼为最佳答案   
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. 'If Target.Column = 9 And Target.Row > 1 Then

  3.     On Error Resume Next
  4.    
  5.     If (Not Intersect(Target, Range("G2:G10")) Is Nothing) Then
  6.         Application.EnableEvents = False
  7.         num = Target.Value

  8.         If Len(num) = 0 Then
  9.             Range("j" & Target.Row).Value = ""
  10.             Range("l" & Target.Row).Value = ""
  11.             '或者cells(target.row,"j").value=""
  12.             'cells(target.row,"l").value=""

  13.             GoTo quit1
  14.         End If

  15.         If Len(Trim(num)) <> 18 Then: GoTo quit1    '号码不是18位,则退出

  16.         yy = Mid(num, 7, 4)    '从第7个字符开始,连续4个字符(以下同理)
  17.         mm = Mid(num, 11, 2)
  18.         dd = Mid(num, 13, 2)


  19.         Cells(Target.Row, "j").Value = DateSerial(yy, mm, dd)
  20.         Cells(Target.Row, "l").Value = "=YEAR(NOW())-YEAR(J" & Target.Row & ")"
  21.     End If
  22. quit1:
  23.     Application.EnableEvents = True
  24. End Sub
复制代码

评分

参与人数 1 +9 收起 理由
yjwdjfqb + 9 很给力!完美!

查看全部评分

回复

使用道具 举报

发表于 2014-4-19 08:18 | 显示全部楼层
就差多单元格没考虑了。

评分

参与人数 1 +9 收起 理由
yjwdjfqb + 9 这样太完美了!版主辛苦了!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-4-19 10:32 | 显示全部楼层
hwc2ycy 发表于 2014-4-19 08:17

Cells(Target.Row, "n").Value = "=IF(MOD(IF(LEN(g" & Target.Row & ")=15,MID(g" & Target.Row & ",15,1),MID(g" & Target.Row & ",17,1)),2)=1,""男"",""女""))"


版主,帮帮看看,我这个加了一个,生成性别的

为什么不成功,谢谢了!
回复

使用道具 举报

发表于 2014-4-19 11:00 | 显示全部楼层
  1. Cells(Target.Row, "n").Value = "=if(MOD(IF(LEN(g" & Target.Row & ")=15,MID(g" & Target.Row & ",15,1),MID(g" & Target.Row & ",17,1)),2),""男"",""女"")"
复制代码

评分

参与人数 1 +9 收起 理由
yjwdjfqb + 9 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-4-19 11:10 | 显示全部楼层
hwc2ycy 发表于 2014-4-19 11:00

哦,原来多了个){:011:}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-18 18:46 , Processed in 0.220679 second(s), 17 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表