使用复制粘贴数据验证单元格,它不起作用

时间:2011-11-14 13:29:48

标签: excel validation vba

我设置了一个excel表,其中包含一些单元格的下拉菜单。该 用户只能从该列表中选择值,并弹出错误消息 当输入某些东西时,它不在列表中(通过数据验证

错误提醒)。

所以这一切都很好......但是当用户将粘贴复制到单元格中时,验证不起作用。如何在复制粘贴的情况下使验证有效。 我搜索并找到了一个解决方案,但它不起作用。 这是我找到的代码。但它不再工作..它总是返回真正的enven我复制粘贴worng

Private Sub Worksheet_Change(ByVal Target As Range)

   If HasValidation(Range(ActiveCell.Address)) Then
        Exit Sub
    Else
        Application.Undo
        MsgBox "Your last operation was canceled." & _
        "It would have deleted data validation rules.", vbCritical

    End If
End Sub

Private Function HasValidation(r) As Boolean
    On Error Resume Next
    x = r.Validation.Type
    If Err.Number = 0 Then HasValidation = True Else HasValidation = False
End Function

2 个答案:

答案 0 :(得分:2)

看起来你从这个页面中获取了代码:

http://www.j-walk.com/ss/excel/tips/tip98.htm

当Worksheet_Change触发时,您的代码始终引用活动单元格,而不是执行复制/粘贴操作的目标。

更改

ActiveCell.Address

Target.Address

看看是否有效。

答案 1 :(得分:0)

@JimmyPena提到的“Target.Address”对我有用。 但是该解决方案仍然带来了一个错误,即如果在添加上述VB代码之后尝试添加另一个验证,则会向用户触发由vb代码生成的消息框数量,该消息框应用于单元格数量(即。您必须单击VB代码提供的消息框的“确定”,以获取应用VB代码的单元格数。如果代码应用于40个单元格,则必须单击“确定”40次。 .p ..) 你可以尝试帮助增加另一个条件来帮助这个吗? 或者是在添加所有验证后仅添加VB代码的最后一种方式。