我设置了一个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
答案 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代码的最后一种方式。