Excel精英培训网

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

[已解决]求助:VBA工作表事件,防止指定区域有重复值输入

[复制链接]
发表于 2011-8-13 16:46 | 显示全部楼层 |阅读模式
用VBA工作表事件的方法,防止
C4:M4这个区域有重复值输入,
当有重复值输入时,弹出提示框“该区域禁止输入重复值”,并且光标返回到当前单元格消除当前单元格的重复值。

见附件,请老师们帮忙,写个VBA工作表事件。

谢谢大家!!!
最佳答案
2011-8-13 18:06
把以下代码放入表三中
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     Dim rng As Range
  3.     Dim rngTemp As Range
  4.     Dim b As Boolean
  5.     Application.EnableEvents = False
  6.    
  7.     Set rng = Application.Union(Range("C4:M4"), Range("F8:P8"), Range("J12:L15"), Range("H15:H23"))
  8.     b = True
  9.     If Not Application.Intersect(Target, rng) Is Nothing Then
  10.         For Each rng In Range("C4:M4")
  11.             If Target.Address <> rng.Address And rng = Target Then
  12.                 b = False
  13.                 Exit For
  14.             End If
  15.         Next
  16.         
  17.         For Each rng In Range("F8:P8")
  18.             If Target.Address <> rng.Address And rng = Target Then
  19.                 b = False
  20.                 Exit For
  21.             End If
  22.         Next
  23.         
  24.          For Each rng In Range("J12:L15")
  25.             If Target.Address <> rng.Address And rng = Target Then
  26.                 b = False
  27.                 Exit For
  28.             End If
  29.         Next
  30.         
  31.         For Each rng In Range("H15:H23")
  32.             If Target.Address <> rng.Address And rng = Target Then
  33.                 b = False
  34.                 Exit For
  35.             End If
  36.         Next
  37.     End If
  38.     If b = False Then
  39.         MsgBox "该区域禁止输入重复值"
  40.         Target = ""
  41.         Target.Select
  42.     End If
  43.     Application.EnableEvents = True
  44. End Sub
复制代码

详见附件:

VBA工作表事件,防止指定区域有重复值输入.rar (12.59 KB, 下载次数: 110)

VBA工作表事件,防止指定区域有重复值输入.rar

2.01 KB, 下载次数: 26

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2011-8-13 16:55 | 显示全部楼层
回复 yjwdjfqb 的帖子

哦,刚才那个附件,没有发对,大家以这个附件为准吧,,,谢谢大家了

用VBA工作表事件的方法,防止
C4:M4,F8:P8,J12:L15,H15:H23
这几个区域有重复值输入,
当有重复值输入时,弹出提示框“该区域禁止输入重复值”,并且光标返回到当前单元格消除当前单元格的重复值。



VBA工作表事件,防止指定区域有重复值输入.rar

2.28 KB, 下载次数: 44

回复

使用道具 举报

发表于 2011-8-13 17:01 | 显示全部楼层
晕,你把附件的东西都删除了,又表述不清,实难猜出你要的是什么,是每个区域单独不能重复吗?晕,你输入的是什么样的数据?
回复

使用道具 举报

发表于 2011-8-13 17:22 | 显示全部楼层
其实数据有效性就可以啊,不过如果学习的话,到可以用vba试一试,详见附件

VBA工作表事件,防止指定区域有重复值输入.rar (2.01 KB, 下载次数: 33)
回复

使用道具 举报

 楼主| 发表于 2011-8-13 17:29 | 显示全部楼层
回复 wbzxz 的帖子

老师,你好,你发的那个附件中没有VBA代码,你下载二楼那个附件,给我写一下代码好吧,谢谢啦。。。
回复

使用道具 举报

发表于 2011-8-13 17:29 | 显示全部楼层
回复 yjwdjfqb 的帖子

新附件和老附件相比,不过是多增加了几个区域而已,多加几个for next 循环就行啊。
回复

使用道具 举报

 楼主| 发表于 2011-8-13 17:30 | 显示全部楼层
回复 wbzxz 的帖子

老师,你刚才发的那个附件中没有VBA代码
回复

使用道具 举报

发表于 2011-8-13 18:06 | 显示全部楼层    本楼为最佳答案   
把以下代码放入表三中
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     Dim rng As Range
  3.     Dim rngTemp As Range
  4.     Dim b As Boolean
  5.     Application.EnableEvents = False
  6.    
  7.     Set rng = Application.Union(Range("C4:M4"), Range("F8:P8"), Range("J12:L15"), Range("H15:H23"))
  8.     b = True
  9.     If Not Application.Intersect(Target, rng) Is Nothing Then
  10.         For Each rng In Range("C4:M4")
  11.             If Target.Address <> rng.Address And rng = Target Then
  12.                 b = False
  13.                 Exit For
  14.             End If
  15.         Next
  16.         
  17.         For Each rng In Range("F8:P8")
  18.             If Target.Address <> rng.Address And rng = Target Then
  19.                 b = False
  20.                 Exit For
  21.             End If
  22.         Next
  23.         
  24.          For Each rng In Range("J12:L15")
  25.             If Target.Address <> rng.Address And rng = Target Then
  26.                 b = False
  27.                 Exit For
  28.             End If
  29.         Next
  30.         
  31.         For Each rng In Range("H15:H23")
  32.             If Target.Address <> rng.Address And rng = Target Then
  33.                 b = False
  34.                 Exit For
  35.             End If
  36.         Next
  37.     End If
  38.     If b = False Then
  39.         MsgBox "该区域禁止输入重复值"
  40.         Target = ""
  41.         Target.Select
  42.     End If
  43.     Application.EnableEvents = True
  44. End Sub
复制代码

详见附件:

VBA工作表事件,防止指定区域有重复值输入.rar (12.59 KB, 下载次数: 110)
回复

使用道具 举报

 楼主| 发表于 2011-8-13 18:32 | 显示全部楼层
回复 wbzxz 的帖子

谢谢老师,不厌其烦的解答,非常的感谢!!!
回复

使用道具 举报

 楼主| 发表于 2011-8-13 19:00 | 显示全部楼层
回复 wbzxz 的帖子

刚发现一个问题,
这三个区域,再输入,语文,数学等字符时,不能输入。
防止输入重复值,只是针对各自的区域中,不能再出现第二个两样的字符。
如:C4:M4中不能输入重复值;
  F8:P8中不能输入重复值;
  H15:H23中不能输入重复值;
  J12:L15中不能输入重复值;
他们是各自独立的。

请见附件:


VBA_工作表事件【防止指定区域有重复值输入】.rar

9.98 KB, 下载次数: 17

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-26 10:31 , Processed in 0.962115 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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