如何防止在Excel VBA中粘贴验证下拉单元格

时间:2018-05-29 19:06:15

标签: excel-vba vba excel

我需要阻止用户粘贴我的验证下拉单元格。我已经阅读并尝试了各种解决方案,其中没有一个能够正常工作。这段代码我检查粘贴的值是否遵循验证规则,但是如果将整个单元格粘贴到我的验证单元格上它就不起作用(似乎此事件在粘贴后触发,因此验证将与前一个单元格一起擦除):

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
For Each Cell In Range("D2:F13")
    If Not Cell.Validation.Value Then
        MsgBox "Value violates validation rule"
        Application.Undo
        Exit Sub
    End If
Next

理想情况下,代码会检查正在粘贴的单元格的值是否与验证下拉选项匹配,并且只允许将值(而不是格式)粘贴到单元格中。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以在特定单元格中禁用剪切\复制:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ' TARGET IS YOUR VALIDATION CELL
    If Target.Column = 1 And Target.Row = 1 Then
        Application.CutCopyMode = False
    End If
End Sub

或者更复杂的是,您可以尝试在SelectionChange

上查看用户的剪贴板
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    ' TARGET IS YOUR VALIDATION CELL
    If Target.Column = 1 And Target.Row = 1 Then

        Set MyData = New DataObject
        MyData.GetFromClipboard

        'In MyData.GetText you have the clipboard data in text format
        If MyData.GetText <> "what you want" then
            '...
        End if

    End If
End Sub

在这种情况下,您必须添加对Microsoft Forms 2.0 Object Library的引用。您可以在此路径中找到它:C:\Windows\System32\FM20.DLL