Excel 强制粘贴的值遵守数据验证规则

Excel 强制粘贴的值遵守数据验证规则,excel,vba,validation,Excel,Vba,Validation,我有一个由输入和报警组成的(简化示例)矩阵。每个动作(X)都应有一个输入和一个报警,即e列或第6行中不应插入任何动作 我使用了数据验证来实现这一点,它是有效的 但是,如果我将数据粘贴到这些单元格中,它们将不遵循验证规则。我插入了此VBA代码以防止出现这种情况(摘自www.j-walk.com/ss/excel/tips/tip98.htm): 但是,此代码还防止将值粘贴到单元格中,即使这些值未违反验证规则,例如,如果我将X粘贴到输入a;警报1,我收到一条错误消息。是否有任何方法可以防止仅当值

我有一个由输入和报警组成的(简化示例)矩阵。每个动作(X)都应有一个输入和一个报警,即e列或第6行中不应插入任何动作

我使用了数据验证来实现这一点,它是有效的

但是,如果我将数据粘贴到这些单元格中,它们将不遵循验证规则。我插入了此VBA代码以防止出现这种情况(摘自www.j-walk.com/ss/excel/tips/tip98.htm):

但是,此代码还防止将值粘贴到单元格中,即使这些值未违反验证规则,例如,如果我将X粘贴到输入a;警报1,我收到一条错误消息。是否有任何方法可以防止仅当值违反验证规则时才粘贴它们

编辑:

我已将代码更改为:

Private Sub Worksheet_Change(ByVal Target As Range)

With Range("D4:H8").Validation
        .Delete
        .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=OR(ISBLANK(D4),AND(NOT(ISBLANK($C4)),NOT(ISBLANK(D$3))))"
        .IgnoreBlank = False
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = "Stop"
        .InputMessage = ""
        .ErrorMessage = "Actions Must Have Input and Output"
        .ShowInput = True
        .ShowError = True
    End With

Me.CircleInvalid

Count = 0
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
    If Not Intersect(shp.TopLeftCell, Range("D4:H8")) Is Nothing Then Count = Count + 1
Next

If Count > 0 Then
MsgBox "Actions Must Have Input and Output"
End If

End Sub

现在,它将无效单元格圈起来,如果找到一个,则生成一个消息框。这是基于无效圆是形状这一事实来完成的。我可以通过搜索整个工作表来获得代码,但我正在尝试将搜索范围缩小到指定的范围。但是,由于shp.TopLeftCell,我得到了错误“1004-应用程序定义或对象定义错误”。有什么想法吗?

试着做一个特别的粘贴;普通粘贴会覆盖单元格的format属性。

决定不按形状路径进行,而是搜索验证值:

Dim Cell As Range
For Each Cell In Range("D4:H8")
    If Not Cell.Validation.Value Then
        MsgBox "Actions Should Have Input and Output"
        Exit Sub
    End If
Next

单击单元格并将数据粘贴到excel顶部的公式栏中,而不是单击单元格并单击粘贴。然后按回车键。这允许我从剪贴板粘贴文本,但保留数据验证

我只使用excel中的文本和数字以及外部来源对此进行了测试,从未使用过高级公式等,因此它可能无法满足所有需求


每次粘贴只需多做一步,但在我需要检查字符数的特定项目上,它为我节省了大量时间。

解决这个问题需要的答案太多了。J-Walk的代码是防止将单元格粘贴到数据验证范围的一个具体示例。是否在整个范围内重新恢复验证并检查无效条目;定义复制的范围,然后测试该范围;显示消息或突出显示无效单元格;在表单中列出无效单元格,允许用户编辑和替换它们?我正在寻找第一个或第三个建议。我希望用户知道他粘贴的数据是否违反了数据验证规则。这可以通过错误/警告消息或突出显示无效单元格(以可能的为准)实现。您必须在遇到无法解决的问题时进行尝试并返回。因此,这不是一个代码编写服务。我会在正确的方向上帮助你,但只是到目前为止。我已经创建了一个代码来检查无效的单元格。如果在编辑中发现无效单元格,我现在在搜索范围以生成msgbox时遇到问题。这种想法是让不了解VBA或数据验证的人按照自己的意愿进行复制和粘贴,但被告知他们违反了规则。
Dim Cell As Range
For Each Cell In Range("D4:H8")
    If Not Cell.Validation.Value Then
        MsgBox "Actions Should Have Input and Output"
        Exit Sub
    End If
Next