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

Excel VBA中如何防止粘贴过验证下拉单元格,excel,vba,Excel,Vba,我需要阻止用户粘贴到我的验证下拉单元格上。我读过并尝试过各种各样的解决方案,但没有一种是正确的。我拥有的这段代码检查粘贴的值是否符合验证规则,但如果将整个单元格粘贴到我的验证单元格上,则它不起作用(似乎粘贴后会触发此事件,因此验证会与前一个单元格一起被擦除): 理想情况下,代码将检查正在粘贴的单元格的值是否与验证下拉选项匹配,并且只允许将值(而不是格式)粘贴到单元格中 谢谢 您可以在特定单元格中禁用剪切\复制: Private Sub Worksheet_SelectionChange(ByVa

我需要阻止用户粘贴到我的验证下拉单元格上。我读过并尝试过各种各样的解决方案,但没有一种是正确的。我拥有的这段代码检查粘贴的值是否符合验证规则,但如果将整个单元格粘贴到我的验证单元格上,则它不起作用(似乎粘贴后会触发此事件,因此验证会与前一个单元格一起被擦除):

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


谢谢

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

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
Private子工作表\u selection更改(ByVal目标作为范围)
'目标是您的验证单元
如果Target.Column=1,Target.Row=1,则
设置MyData=newdataobject
MyData.GetFromClipboard
'在MyData.GetText中,剪贴板数据为文本格式
如果MyData.GetText“你想要什么”,那么
'...
如果结束
如果结束
端接头

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

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

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
Private子工作表\u selection更改(ByVal目标作为范围)
'目标是您的验证单元
如果Target.Column=1,Target.Row=1,则
设置MyData=newdataobject
MyData.GetFromClipboard
'在MyData.GetText中,剪贴板数据为文本格式
如果MyData.GetText“你想要什么”,那么
'...
如果结束
如果结束
端接头

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

非常感谢您的回复,我使用了您的第一种方法。第一种方法很好,谢谢:)非常感谢您的回复,我使用了您的第一种方法。第一种方法很好,谢谢:)