2011-11-14 34 views
3

我使用下拉菜单为某些单元设置了Excel表。该 用户只能从列表中选择值和错误信息弹出 东西时键入它不在列表中(通过数据验证使用数据验证单元格复制粘贴,其不起作用

错误警报)。

所以这一切都很好...但是当用户复制粘贴到单元格然后验证不起作用。如果在复制粘贴的情况下验证有效。 我已经搜索并找到一个解决方案,但它不工作。 这是我找到的代码。但它不工作的任何more..It总是返回true enven我复制粘贴拨错

 
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火灾,你的代码始终引用活动单元格,而不是执行复制/粘贴操作的目标。

变化

ActiveCell.Address 

Target.Address 

,看看是否可行。

+0

嗨JP,它不工作。如果我将错误的数据粘贴到有验证的单元格中,那么HasValidation函数总是返回false。 – user999896

0

“Target.Address”为我工作,如@JimmyPena所述。 但是这个解决方案仍然会带来一个错误,即如果在添加上面提到的VB代码之后尝试添加另一个验证,用户将被应用于单元数量的vb代码生成的消息框数量激发。你必须点击VB代码提供的消息框的“确定”,以查看VB代码已经应用到的单元格数量。如果代码应用于40个单元格,则必须单击“确定”40次。 .. phew ..) 你可以请尝试帮助添加另一个条件来帮助吗? 或者在添加所有验证之后仍然只添加VB代码的最后一种方式。

相关问题