You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于数据验证限制特定列粘贴权限,允许同列内粘贴

需求与现有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 12:51:09