首页 文章

使用复制粘贴数据验证单元格,它无法正常工作

提问于
浏览
3

我为一些单元格设置了一个包含下拉菜单的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 回答

  • 2

    看起来您从此页面获取了代码:

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

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

    更改

    ActiveCell.Address
    

    Target.Address
    

    看看是否有效 .

  • 0

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

相关问题