Excel精英培训网

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

[已解决]change 事件无法停止

[复制链接]
发表于 2016-8-25 20:21 | 显示全部楼层 |阅读模式
大师们,为了禁止重复输入出错,我参照别人的格式写了一段代码思路是:
如果重复输入,弹出提醒框提醒;
将输入内容清空,并跳转到重复内容的表格。


现在问题来了:输入一次重复后,引发了事件,再输入任何内容,包括与A列中午任何重复的内容都报错,根本停不下来。只有将代码删掉才能正常。

我到底哪儿出错了?望大师们解惑帮助修改。
如果同一个表格,几个列都设置类似的出错提醒,应该怎么改呢?

拜托大家,谢谢!


最佳答案
2016-8-25 21:42
本帖最后由 pengyx 于 2016-8-25 21:51 编辑
喝酒派掌门 发表于 2016-8-25 20:21


Private Sub Worksheet_Change(ByVal Target As Range)
Set cl = Sheets("开票信息").Range("a" & Rows.Count).End(3)
If Target = cl Then
    For i = 2 To cl.Row-1
        If Target.Value = Cells(i, 1) Then
            s = i
            Exit For
        End If
    Next
    If s <> 0 Then
        MsgBox "客户信息已存在,请核实后输入,位于第" & s & "行"
        cl.ClearContents
        Range("a" & s).Select
    End If
End If
End Sub

chang 事件无法终止.zip

11.43 KB, 下载次数: 11

如题

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2016-8-25 20:21 | 显示全部楼层
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.      Dim arr, i%, j%
  3.      
  4.      i = Sheets("开票资料").Range("A65536").End(xlUp).Row
  5.      arr = Sheets("开票资料").Range("A1:A" & i)
  6.       With Target
  7.          If .Column <> 1 Or .Count > 1 Then Exit Sub
  8.          If Target.Column = 1 Then
  9.         For j = 1 To i
  10.           If Target.Value = arr(j, 1) Then
  11.              MsgBox "客户信息已存在,请核对更改"
  12.              Application.EnableEvents = False
  13.              Target.Value = ""
  14.              Application.EnableEvents = True
  15.              Cells(j, 1).Select
  16.           End If
  17.          
  18.           Next
  19.       End If
  20.       End With
复制代码
回复

使用道具 举报

发表于 2016-8-25 21:11 | 显示全部楼层
原来是这样呀,这个变动事件其实对表格使用很有影响的,这种提示重复的事,还是用条件格式吧
回复

使用道具 举报

发表于 2016-8-25 21:24 | 显示全部楼层
把  For j = 1 To i  ,改为 For j = 1 To i-1 就行了

评分

参与人数 1 +1 收起 理由
喝酒派掌门 + 1 很给力

查看全部评分

回复

使用道具 举报

发表于 2016-8-25 21:42 | 显示全部楼层    本楼为最佳答案   
本帖最后由 pengyx 于 2016-8-25 21:51 编辑
喝酒派掌门 发表于 2016-8-25 20:21


Private Sub Worksheet_Change(ByVal Target As Range)
Set cl = Sheets("开票信息").Range("a" & Rows.Count).End(3)
If Target = cl Then
    For i = 2 To cl.Row-1
        If Target.Value = Cells(i, 1) Then
            s = i
            Exit For
        End If
    Next
    If s <> 0 Then
        MsgBox "客户信息已存在,请核实后输入,位于第" & s & "行"
        cl.ClearContents
        Range("a" & s).Select
    End If
End If
End Sub

评分

参与人数 1 +1 收起 理由
喝酒派掌门 + 1 很给力

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 01:22 , Processed in 0.362163 second(s), 17 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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