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