基于数据验证限制特定列粘贴权限,允许同列内粘贴
需求与现有VBA代码说明
我刚接触编程,VBA是我学习的第一门编程语言,进度较慢。目前有一份供供应商填写产品信息的Excel表格,已设置下拉框数据验证及公式以简化操作、规范数据,但供应商的复制粘贴操作会覆盖数据验证规则,导致前期设置失效,数据也变得不规范。
具体需求
需要编写VBA代码实现以下功能:
- 禁止粘贴无数据验证的单元格内容
- 禁止向目标列粘贴数据验证类型不符的内容
- 允许同一数据验证列内的单元格互相粘贴(示例:E列有红、蓝、黄选项,G列有汽车品牌选项,E列内容可在E列内粘贴,但不可粘贴到G列)
当前使用的VBA代码
Dim boolDontShowAgain As Boolean Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo Whoa Application.EnableEvents = False 'Does the validation range still have validation? If Not HasValidation(Range("PIM - MASTER DATA!A3:A999")) Then RestoreValidation If Not HasValidation(Range("PIM - MASTER DATA!G3:G999")) Then RestoreValidation If Not HasValidation(Range("PIM - MASTER DATA!H3:H999")) Then RestoreValidation If Not HasValidation(Range("PIM - MASTER DATA!I3:I999")) Then RestoreValidation If Not HasValidation(Range("PIM - MASTER DATA!O3:O999")) Then RestoreValidation If Not HasValidation(Range("PIM - MASTER DATA!P3:P999")) Then RestoreValidation If Not HasValidation(Range("PIM - MASTER DATA!Q3:Q999")) Then RestoreValidation If Not HasValidation(Range("PIM - MASTER DATA!R3:R999")) Then RestoreValidation If Not HasValidation(Range("PIM - MASTER DATA!S3:S999")) Then RestoreValidation If Not HasValidation(Range("PIM - MASTER DATA!R3:R999")) Then RestoreValidation If Not HasValidation(Range("PIM - MASTER DATA!AF3:AF999")) Then RestoreValidation If Not HasValidation(Range("PIM - MASTER DATA!AG3:AG999")) Then RestoreValidation If Not HasValidation(Range("PIM - MASTER DATA!BG3:BG999")) Then RestoreValidation If Not HasValidation(Range("PIM - MASTER DATA!BH3:BH999")) Then RestoreValidation If Not HasValidation(Range("PIM - MASTER DATA!BR3:BR999")) Then RestoreValidation If Not HasValidation(Range("PIM - MASTER DATA!BS3:BS999")) Then RestoreValidation If Not HasValidation(Range("PIM - MASTER DATA!CG3:CG999")) Then RestoreValidation If Not HasValidation(Range("PIM - MASTER DATA!CH3:CH999")) Then RestoreValidation If Not HasValidation(Range("PIM - MASTER DATA!CI3:CI999")) Then RestoreValidation Letscontinue: Application.EnableEvents = True Exit Sub Whoa: MsgBox Err.Description Resume Letscontinue End Sub Private Sub RestoreValidation() Application.Undo If boolDontShowAgain = False Then MsgBox "Your last operation was canceled." & _ "It would have deleted data validation rules.", vbCritical boolDontShowAgain = True End If End Sub Private Function HasValidation(r) As Boolean On Error Resume Next Debug.Print r.Validation.Type If Err.Number = 0 Then HasValidation = True End Function
内容的提问来源于stack exchange,提问作者Bastian
相关产品推荐
相关产品推荐

