各位: 大家好。 想要随心所欲的使用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),如果可以增加权限密码,可以插入栏和列、删除栏和列,就和我想要达到的效果差不多了。 大家,有时间的,烦请指导一下,看可不可以达到我想要的效果! (我上传的两个表格,可能由于繁简体的原因,会有乱码的情况,各位请见谅) |