我为一些单元格设置了一个包含下拉菜单的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 回答
看起来您从此页面获取了代码:
http://www.j-walk.com/ss/excel/tips/tip98.htm
触发Worksheet_Change时,您的代码始终引用活动单元格,而不是执行复制/粘贴操作的目标 .
更改
至
看看是否有效 .
正如@JimmyPena所提到的,“Target.Address”对我有用 . 但是该解决方案仍然带来了一个错误,即如果在添加上述VB代码后尝试添加另一个验证,则会向用户触发由vb代码生成的消息框数量,该消息框应用于单元格数量(即 . 您必须单击VB代码提供的消息框的“确定”,以获取应用VB代码的单元格数 . 如果代码应用于40个单元格,则必须单击“确定”40次 . .phew ..)你可以尝试帮助添加另一个条件来帮助这个吗?或者在添加所有验证后仅添加VB代码的最后一种方式 .