ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 532|回复: 6

[求助] 对数据有效性的保护

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-6-1 19:48 | 显示全部楼层 |阅读模式
各位大神,我的表格中设置了二级下拉菜单,我想:
1、防止别人通过复制粘贴、下拉,破坏我设置的数据有效性(数据源表已隐藏,可通过在工作表名称取消隐藏,显示单独的sheet:“数据源”);
2、如果B列的某个数据删除了,我想让同一行D列的数据自动清空。



下面是我的代码,存放在thisworkbookt,但无法实现上述2个功能。请帮忙看一下哪里出了问题。感谢!


Sub Worksheet_Activate()   '禁止复制、粘贴、下拉填充
    With Application
        .CellDragAndDrop = False
        .OnKey "^{v}", " "
        .CutCopyMode = False
    End With
End Sub

Sub Worksheet_SelectionChange() '禁止复制、粘贴
    Application.CutCopyMode = False
End Sub

Sub Worksheet_Deactivate() '恢复禁止复制、粘贴
    With Application
        .CellDragAndDrop = True
        .OnKey "^{v}"
    End With
End Sub

Sub Worksheet_Change(ByVal Target As Range) '当B列某单元格内容删除时,同一行D列单元格内容也应清空
    If Target.Column = 2 Then
        If Target.Value = "" Then
            Target.Offset(, 2) = ""
        End If
    End If
End Sub



监盘.rar

25.9 KB, 下载次数: 6

附件

TA的精华主题

TA的得分主题

发表于 2023-6-2 08:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
总表保护不是有保护数据有效性的功能的吗

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-2 14:51 | 显示全部楼层
3190496160 发表于 2023-6-2 08:53
总表保护不是有保护数据有效性的功能的吗

菜单项不能保护数据有效性,我百度的结果也是说Excel表还未提供此功能。
请老师百忙之中看一下我的代码有啥问题,谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-7 16:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
将代码由thisworkbook,转移到需要保护数据有效性的“监盘表”中,稍微修改,代码可以运行了,基本能实现前面的功能了。
但有时会出现一点问题:
1、“监盘”表中复制、粘贴、下拉偶尔还是能用,但我也不知道什么情况下会发生;
2、当功能正常时,却出现提示: image.png
请各位高手帮忙看一下这是什么问题?

监盘6.7.rar

27.81 KB, 下载次数: 1

附件

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-8 20:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 scl2003921 于 2023-6-9 11:12 编辑

经过修改,目的基本能实现:
1、禁止复制粘贴、下拉填充破坏数据有效性;不存在时好时坏的现象了。
2、C列某个数据删除了,同一行D、E两列数据自动删除;
3、不会出现复制粘贴时,错误提示了(见4楼)
但,还存在一个问题:
在上述第2条操作时,如果只清空C列一个单元格,正常运行;如果同时清空C列多个单元格,则出错,改了代码也出错(请见第2段)。
请哪位老师帮忙看一下问题出在哪里?
第一段:
Sub Worksheet_Change(ByVal Target As Range) '在“监盘”表中,当B列某单元格内容删除时,同一行C、D列单元格内容也应清空
    If Target.Column = 3 Then
        If Target.Value = "" Then
            Target.Offset(, 1).Resize(1, 2) = ""
        End If
    End If
End Sub

第二段
Sub Worksheet_Change(ByVal Target As Range) '若C列同时选择多行,修改代码仍不能正常运行。 在“监盘”表中,当B列某单元格内容删除时,同一行C、D列单元格内容也应清空

  If Target.Column = 3 Then
       If Target.Value = "" Then
           Target.Offset(, 1).Resize(Target.rows.count, 2) = ""
       End If
    End If
End Sub

函证.rar

33.05 KB, 下载次数: 2

附件

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-8 20:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

内容重复了,删除此帖

本帖最后由 scl2003921 于 2023-6-9 09:58 编辑

与上一贴相同,重复发帖,删除此帖内容。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-10 18:45 | 显示全部楼层
scl2003921 发表于 2023-6-8 20:20
经过修改,目的基本能实现:
1、禁止复制粘贴、下拉填充破坏数据有效性;不存在时好时坏的现象了。
2、C ...

已经解决该问题,感谢罗刚君老师的指导!
Sub Worksheet_Change(ByVal Target As Range)    '在“监盘”表中,当B列某单元格内容删除时,同一行C、D列单元格内容也应清空
    Application.EnableEvents = False
    If Target.Column = 3 Then
        If Target.Cells.Count = 1 Then
            If Target.Value = "" Then
                Target.Offset(, 1).Resize(1, 2) = ""
            End If
        Else
            Dim cell As Range, Rng As Range
            Set Rng = Application.Intersect(Target, Target.Parent.UsedRange)
            Rng.Offset(0, 1).Resize(Rng.Rows.Count, 2) = ""
        End If
    End If
    Application.EnableEvents = True
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 11:44 , Processed in 0.042676 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表