EXCEL VBA限制复制并粘贴到数据验证列的当前列

时间:2016-09-29 21:31:16

标签: excel-vba vba excel

我有一个大型电子表格,并对包含下拉列表的多个列进行了验证。

我有以下VBA代码,限制用户点击删除按钮并在下拉列中删除列中的单元格。这很好用,但它不会阻止用户从另一列复制单元格并粘贴下拉列表。下面是一列的代码。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("C5:C5004")) Is Nothing Then
        If Len(Target.Text) = 0 Then
            MsgBox "You must select an item from the list!"
            Target.Select
            Application.Undo
        End If
    End If

请告知是否有办法限制复制并粘贴到同一列。

我正在使用的电子表格是供用户编译大量数据的,我希望通过下拉列表和长度验证来保持数据完整性等。一旦完成,我将采用并使用SSIS加载应用程序将各种表中的数据作为速度加载。

这是我唯一需要的缺失成分。我不是VBA的主人,这就是我问你的原因。

1 个答案:

答案 0 :(得分:0)

根据Excel VBA How to detect if something was pasted in a Worksheet中的代码,您可以对其进行调整以获得与此类似的内容:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lastAction As String

    ' Get the last action performed by user
    lastAction = Application.CommandBars("Standard").Controls("&Undo").List(1)

    If Not Intersect(Target, Range("C5:C5004")) Is Nothing Then
        ' Check if the cell was cleared or the last action was a paste
        If Len(Target.Text) = 0 Or Left(lastAction, 5) = "Paste" Then
            MsgBox "You must select an item from the list!"
            Target.Select
            Application.Undo
        End If
    End If

End Sub

提示:您还可以检测工作表中执行的其他操作。为此,只需将lastAction打印到MsgBoxDebug.Print,然后抓住您需要的内容。

HTH;)