ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

求助:Excel VBA,如何防止单元格被修改(手工修改以及粘贴等)?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-1-23 17:28 | 显示全部楼层 |阅读模式
各位:
    大家好。
    想要随心所欲的使用VBA,真不容易。再次请教各位了。
    想要达到的效果:工作表中有很多不连续的区域,其中设有公式,自动抓取数据。但是,如果公式被别人给改了,那事情就大条了,后面就会一死一大片。将这些不连续的区域,用VBA设定好,给权限的人就可以修改,不给权限的人就不能修改。
    我也在Excel Home上查了一些数据,效果不理想,如下:
一、http://club.excelhome.net/thread-403682-1-1.html
ThisWorkbook     Worksheet     SelectionChange
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Address = "$iv$1" Then Exit Sub
If [iv1] <> "" And Target.Value <> [iv1] Then
   x = InputBox(Target.Address(0, 0) & " 单元格原值:" & [iv1] & Chr(10) & "现修改为:" & Target & "" & Chr(10) & "请输入修改权限的密码:", "修改权限验证")
   If x <> "" Then
      If x <> 123 Then
         Target.Value = [iv1]
         MsgBox "无权限修改,保留原值!"
      End If
   Else
      Target.Value = [iv1]
      MsgBox "无权限修改,保留原值!"
   End If
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
[iv1] = Target.Value
End Sub
    這個范例,弊端1:范围太广,整个工作表都包含进去了,我要的是可以自由设定的不连续的可选的区域,而非整个表格;弊端2:牵扯到另一个单元格“IV1”(或者“XFD1”),分页容易出问题。
二、http://club.excelhome.net/thread-545398-1-1.html
ThisWorkbook     Worksheet     Change
Private Sub Worksheet_Change(ByVal Target As Range)
  If Intersect(Target, Range("AI5:AP33,AR5:AT33")) Is Nothing Then Exit Sub
  Application.EnableEvents = False
  Application.Undo
  MsgBox "本单元格禁止修改," & Chr(10) & "已回复原有数据!", 48 + vbOKOnly, "亲!友情提示啊亲!!^_^"
  Application.EnableEvents = True
End Sub
    此范例,弊端1:功能被限制了,无法自由编辑,新增、删除栏位和列都不行。弊端2:无权限来控制修改,不熟悉VBA的根本修改不了,熟悉VBA的人,修改后,还要将VBA恢复,不然,后面使用表格的人就不可控,有的可能有权限修改,却又不懂VBA,不会改;
    要是可以把上面两个综合在一起就好了。
    效果1:可以自由设定很多个不连续的区域。
    效果2:无权限的人无法修改单元格的内容。
    效果3:有权限的人可以修改单元格的内容,但要密码。
    效果4:单元格的其他编辑功能(框线、字体、颜色、插入栏和列、删除栏和列等),有无权限,都要有,或者获取权限后才有,也可以接受。
    其实,上面的第二个数据(表格2),如果可以增加权限密码,可以插入栏和列、删除栏和列,就和我想要达到的效果差不多了。
    大家,有时间的,烦请指导一下,看可不可以达到我想要的效果!
    (我上传的两个表格,可能由于繁简体的原因,会有乱码的情况,各位请见谅)
  
  

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-23 17:31 | 显示全部楼层
汗!漏了附件,补起!!

表格2.rar

60.89 KB, 下载次数: 245

表格1.rar

10.48 KB, 下载次数: 251

TA的精华主题

TA的得分主题

发表于 2015-1-25 08:54 | 显示全部楼层
可以用工具--选项--安全性
和工具--保护--保护工作表

可以达到你要的,得到权限修改

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-26 10:39 | 显示全部楼层
你好,x007file。     (再补充一下,表格1的密码是123)
    对于保护工作表,我以前就试过,只能说效果不理想。
    我把保护工作表设定中,能允许的,全部允许了,之后:
    一、依旧无法删除栏和列(不知道是我的软件有问题还是咋的,设定允许了,实际就是不行。)。
    二、获取权限后,取消保护工作表,整个工作表都开放了,编辑,编辑,编辑。。。存档。。。关闭档案,再点一次保护工作表???忘了,再然后,黄了。^_^
    三、其他的功能受限,我想应该还有。
    总之,保护工作表,依然有隐患,使用起来不放心、不爽,最怕上面的第二点发生。
    打个比方,我的Excel工作表就是一幅地图,地图上有狠多雷区,有单个的,有成片的,有直线的,有十字的,一个地雷就相当于一个单元格,你没踩到地雷,该咋地就咋的,想咋的就咋的。但是,万一你踩到了第一个地雷,天空一声巨响,询问你要不要排雷工具呀,想要,拿钱!没钱?!自己想办法。没有办法的人,黄了,那个有地雷的地方,你占领不了,干瞪眼。有办法的人(坑、蒙、拐、骗、偷。。。),拿到钱,买工具,排地雷,同时,买的工具也被回收了,噶噶,又占领了一个地方。第二个地雷、第三个地雷、第四个地雷。。。全依次方法,一个工具只能排一个地雷,没有捷径,没有一劳永逸。等第二次再进这个地图,地雷原地满血复活了,从头开始。
    汗,好像有点罗嗦哈。
    还是要感谢x007file,你的提议很好,但是,和我的预想还是有点差距,再看看其他的各位能人,能否使用VBA,完美的实现我的这个预想。
    各位大大,我抱拳,拱手,求助了!!!

TA的精华主题

TA的得分主题

发表于 2015-1-27 08:14 | 显示全部楼层
Private Sub Workbook_BeforeClose(Cancel As Boolean)
加上默认的保护工作表
End Sub
看是否达到你要的效果。

被保护区是肯定不能插入,删除的。你的操作是不能碰到被保护区(尤其整行,整列时)。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-27 16:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
汗!能不能给完整的编码?
我很菜啊!
Workbook_BeforeCllose?
Thisworkbook?
Sheet1? Worksheet? Change?

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-31 20:59 | 显示全部楼层
求助啊!各位高手,指点下新手呗!

TA的精华主题

TA的得分主题

发表于 2015-6-23 23:35 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-6 00:58 , Processed in 0.045160 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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