VBA 禁用单元格拖放功能 限定事件作用区域
本技巧的目的:掌握防止用户误触发拖放单元格右下角的小十字对单元格内容进行复制等操作的事件代码,避免对数据表造成破坏。
下图是正常情况:在单元格右下角有小十字光标
下图是有事件限定后的单元格:不出现小十字光标
1. 代码助手
代码助手下载地址 EXCEL880.COM
使用代码助手后,只要输入中文:拖放+空格 就会出现代码,选择需要的复制到代码窗口即可。
使用代码助手能够实现代码的快速输入。
2. 事件代码
单独工作表限定拖放的方法:
事件代码写在相应的工作表中:
SelectionChange 事件:当工作表上的选定区域发生改变时发生此事件。
代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [G3:H5]) Is Nothing Then
'Target 选定区域 与 G3:H5 两者之间的重叠区域 不为空时,即重叠时
Application.CellDragAndDrop = False '禁用单元格拖放功能
Else
Application.CellDragAndDrop = True '启用单元格拖放功能
End If
End Sub
注释:
Target 代表:选定的区域。
为了不影响其他工作表,在工作表切换成其他工作表时恢复单元格的拖放功能
代码:
Private Sub Worksheet_Deactivate()
Application.CellDragAndDrop = True 启用单元格拖放功能
End Sub
注释:
Deactivate:工作表被停用时发生此事件。切换成其他工作表即发生此事件。
整体设定:根据工作表名称来筛选是否限定禁止拖放的方法
事件代码写在 ThisWorkbook 中
SheetActivate: 当激活任何工作表时发生此事件
代码:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'任意工作表激活的时候 本事件启动
Dim s
s = ",xxx,yyy,zzz," '禁用的表名列表
If InStr(s, "," & Sh.Name & ",") > 0 Then '存在禁用列表中
Application.CellDragAndDrop = False '禁用单元格拖放功能
Else '
Application.CellDragAndDrop = True'启用单元格拖放功能
End If
End Sub
注意:
",xxx,yyy,zzz," 在字符前后加上“ ,”, 可以防止造成局部字符出现误判,有效分隔
sh.name 前后也要相应加上 “ ,”