Excel精英培训网

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

[已解决]上传附件了,请帮忙看看

[复制链接]
发表于 2016-7-3 09:57 | 显示全部楼层 |阅读模式
本帖最后由 278059169 于 2016-7-4 10:42 编辑

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
    If Target.Column = 1 And Target.Row > 2 Then
        Application.EnableEvents = False
        Target.Offset(0, 1) = Sheets(2).Range("a:a").Find(Target, , , xlWhole).Offset(0, 1)
        Application.EnableEvents = True
    ElseIf Target.Column = 2 And Target.Row > 2 Then
        Application.EnableEvents = False
        Target.Offset(0, -1) = Sheets(2).Range("b:b").Find(Target, , , xlWhole).Offset(0, -1)
        Application.EnableEvents = True
    End If
End If
End Sub



表2的A列是数组000001      

          B列是名称比如平安银行

在表1的A或B列输入对应的数字或名字,就自动引用表2的对应项到表1的AB列

现在的问题是,随便在表1的A或B列输入错误值后,表格就再也不工作了,只能不保存退出重新打开

能不能输入错误后,提示“没有该股票,请核对后再输入”而后表格是正常工作的
捕获.PNG 捕获1.PNG











最佳答案
2016-7-3 20:31
帮你改了一下代码:
测试通过!
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     On Error GoTo Err_Handle
  3.     If Target.Count = 1 Then
  4.         If Target.Column = 1 And Target.Row > 2 Then
  5.             Application.EnableEvents = False
  6.             Target.Offset(0, 1) = Sheets(2).Range("a:a").Find(Target, , , xlWhole).Offset(0, 1)
  7.             Application.EnableEvents = True
  8.         ElseIf Target.Column = 2 And Target.Row > 2 Then
  9.             Application.EnableEvents = False
  10.             Target.Offset(0, -1) = Sheets(2).Range("b:b").Find(Target, , , xlWhole).Offset(0, -1)
  11.             Application.EnableEvents = True
  12.         End If
  13.     End If
  14.     Exit Sub
  15. Err_Handle:
  16.                 Application.EnableEvents = True
  17.                 MsgBox ("没有该股票,请核对后再输入")
  18.                 Target = ""
  19.                 Target.Select
  20. End Sub
复制代码

新建 Microsoft Excel 工作表.zip

13.37 KB, 下载次数: 6

 楼主| 发表于 2016-7-3 12:25 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2016-7-3 12:48 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2016-7-3 16:31 | 显示全部楼层
顶起来
回复

使用道具 举报

发表于 2016-7-3 20:31 | 显示全部楼层    本楼为最佳答案   
帮你改了一下代码:
测试通过!
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     On Error GoTo Err_Handle
  3.     If Target.Count = 1 Then
  4.         If Target.Column = 1 And Target.Row > 2 Then
  5.             Application.EnableEvents = False
  6.             Target.Offset(0, 1) = Sheets(2).Range("a:a").Find(Target, , , xlWhole).Offset(0, 1)
  7.             Application.EnableEvents = True
  8.         ElseIf Target.Column = 2 And Target.Row > 2 Then
  9.             Application.EnableEvents = False
  10.             Target.Offset(0, -1) = Sheets(2).Range("b:b").Find(Target, , , xlWhole).Offset(0, -1)
  11.             Application.EnableEvents = True
  12.         End If
  13.     End If
  14.     Exit Sub
  15. Err_Handle:
  16.                 Application.EnableEvents = True
  17.                 MsgBox ("没有该股票,请核对后再输入")
  18.                 Target = ""
  19.                 Target.Select
  20. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-7-4 10:41 | 显示全部楼层
wanao2008 发表于 2016-7-3 20:31
帮你改了一下代码:
测试通过!

非常感谢!!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 14:06 , Processed in 1.333826 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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