Excel精英培训网

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

[已解决]关于一个时间记录的小错误,求纠正

[复制链接]
发表于 2012-12-21 10:26 | 显示全部楼层 |阅读模式
我是新人,刚接触VBA,我在运行这个程序后,在操作批量填充或者批量删除单元格值时,总是显示错误类型13,点击调试后,错误语句为红色字体语言,望有高人指点。
Public Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2  And Target.Value="验证" Then  
Target.Offset(, -1) = Now  
End If
End Sub
最佳答案
2012-12-21 11:06
本帖最后由 suye1010 于 2012-12-21 13:22 编辑
tianqixueyu 发表于 2012-12-21 10:51
我想问问,我之前的这个错误产生的原因是什么?我试过只要不加后面的AND就不会错误。

批量操作时候,你选择的Target是多个单元格,当进行Target.Value运算时他生成的也是一个数组,而数组是不能直接与单个值 ,即 "验证"来进行判断的,所以或报类型不匹配的错误。如果你要批量操作,试试下面的代码
  1. Option Explicit
  2. Public Sub Worksheet_Change(ByVal Target As Range)
  3. Dim rng As Range
  4. If Target.Column = 2 Then
  5.     Application.EnableEvents = False
  6.     For Each rng In Target
  7.         If rng.Value = "验证" Then
  8.             rng.Offset(, -1) = Now
  9.         Else
  10.             rng.Offset(, -1) = ""
  11.         End If
  12.     Next
  13.     Application.EnableEvents = True
  14. End If
  15. End Sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-12-21 10:32 | 显示全部楼层
  1. Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  2. If Target.Column = 2 And Target.Value = "验证" Then
  3. Target.Offset(, -1) = Now
  4. End If
  5. End Sub
复制代码
用这个事件,双击第2列“验证”在第1列加入日期

评分

参与人数 1 +1 金币 +5 收起 理由
suye1010 + 1 + 5 论坛感谢你的积极参与!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2012-12-21 10:50 | 显示全部楼层
非常感谢,以为要等很久呢,没想到这里热心人真多啊!
再次感谢!
回复

使用道具 举报

 楼主| 发表于 2012-12-21 10:51 | 显示全部楼层
hoogle 发表于 2012-12-21 10:32
用这个事件,双击第2列“验证”在第1列加入日期

我想问问,我之前的这个错误产生的原因是什么?我试过只要不加后面的AND就不会错误。
回复

使用道具 举报

发表于 2012-12-21 10:59 | 显示全部楼层
原来是CHANGE 事件,Target.Value  返回改变单元值。
但是你改变单元格区域时,就和Target.Value(不能返回单元格区域的值)  冲突了,提示类型不匹配。
回复

使用道具 举报

 楼主| 发表于 2012-12-21 11:02 | 显示全部楼层
hoogle 发表于 2012-12-21 10:59
原来是CHANGE 事件,Target.Value  返回改变单元值。
但是你改变单元格区域时,就和Target.Value(不能返 ...

非常感谢,对你来说是举手之劳,对我来说就是帮我大忙了,谢谢!
回复

使用道具 举报

发表于 2012-12-21 11:03 | 显示全部楼层
tianqixueyu 发表于 2012-12-21 11:02
非常感谢,对你来说是举手之劳,对我来说就是帮我大忙了,谢谢!

不客气,EP论坛欢迎新同学!
回复

使用道具 举报

发表于 2012-12-21 11:06 | 显示全部楼层    本楼为最佳答案   
本帖最后由 suye1010 于 2012-12-21 13:22 编辑
tianqixueyu 发表于 2012-12-21 10:51
我想问问,我之前的这个错误产生的原因是什么?我试过只要不加后面的AND就不会错误。

批量操作时候,你选择的Target是多个单元格,当进行Target.Value运算时他生成的也是一个数组,而数组是不能直接与单个值 ,即 "验证"来进行判断的,所以或报类型不匹配的错误。如果你要批量操作,试试下面的代码
  1. Option Explicit
  2. Public Sub Worksheet_Change(ByVal Target As Range)
  3. Dim rng As Range
  4. If Target.Column = 2 Then
  5.     Application.EnableEvents = False
  6.     For Each rng In Target
  7.         If rng.Value = "验证" Then
  8.             rng.Offset(, -1) = Now
  9.         Else
  10.             rng.Offset(, -1) = ""
  11.         End If
  12.     Next
  13.     Application.EnableEvents = True
  14. End If
  15. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2012-12-21 12:03 | 显示全部楼层
suye1010 发表于 2012-12-21 11:06
批量操作时候,你选择的Target是多个单元格,当进行Target.Value运算时他生成的也是一个数组,而数组是不能直 ...

麻烦再帮我加个判断,如果      Vlaue<>"验证",则为“”

点评

已在8楼更新。  发表于 2012-12-21 13:22
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 00:29 , Processed in 0.193461 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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