首页 > 解决方案 > 如何限制整个列的剪切复制过去选项

问题描述

根据附加的 Excel 表,用户不应该能够剪切“B”列下拉列表的副本和过去。用户应该只能从可用的下拉列表选项中选择数据

带有 dropList 的示例 Excel 工作表 带有 dropList 的示例 Excel 工作表

您能帮我获取 VBAMacros 代码吗?尝试了多种选择,但没有运气。

  Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Not Application.Intersect(Target, Range("B:B")) Is Nothing Or 
  Not Application.Intersect(Target, Range("C:C")) Is Nothing Then
        If Target.Cells.Count > 1 Then
                Application.EnableEvents = False
                       Application.Undo

标签: excelvba

解决方案


正如评论中提到的,这是一种解决方法,因为如果用户可以选择单元格,您就不能真正阻止用户复制。

另一种方法是,如果他们选择了多个单元格,则将当前选择更改为范围中的第一个单元格。将此代码放在工作表中的选择更改中:

If Target.Cells.Count > 1 Then Target.Cells(1).Select

这将在您的工作表 VBA 中得到类似的结果:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Target.Cells(1).Select
End Sub

编辑
以上是为了防止在整个工作表上进行范围选择。如果您只想在 B 列中阻止它,请使用以下命令:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target.Worksheet.Columns(2), Target) Is Nothing Then Target.Cells(1).Select
End Sub

这也可以防止跨 B 列进行选择(例如从 A:C)


推荐阅读