当前位置:编程学堂 > 困难| Excel VBA 锁定指定单元格范围

困难| Excel VBA 锁定指定单元格范围

  • 发布:2023-09-29 14:41

-->

背景:锁定EXCEL表头

1。手动操作流程

基本逻辑不赋值。手动操作流程为:

1。取消所有单元格的“锁定”格式

CTRL+A,选择所有单元格→右键→设置单元格格式→保护→取消选中并锁定

2。选择指定单元格(需要锁定的单元格)→右键→设置单元格格式→保护→勾选锁定

3。点击“审阅”→保护工作表→选中下面所有复选框→确定→输入密码→再次输入密码

2。 VBA方法

1 函数 ProtectRange(rng 作为变体)
2 Application.ScreenUpdating = False
3 暗淡 sh、rg、单元格
4 设置 sh = ActiveSheet
5
6'解锁桌子
7 sh.取消保护“123456”
8
9 '选择所有单元格并设置不锁定
10 sh.Cells.Locked = False
11
12'选择目标单元格并设置锁定
13 sh.Range(rng).Locked = True
14
15'锁定表(除表头不允许修改外,可以进行其他操作)
16 sh.保护密码:="123456",_
17 UserInterFaceOnly:=True, _
18 绘图对象:=False,_
19 内容:=正确,_
20 个场景:=错误,_
21 允许格式化单元格:=True,_
22 允许格式化列:=True, _
23 允许格式化行:=True,_
24 允许插入列:= True, _
25 允许插入行:=True,_
26 允许插入超链接:=True, _
27 允许删除列:=True, _
28 允许删除行:=True, _
29 允许排序:=True, _
30 允许过滤:=True, _
31 允许使用数据透视表:=True
32 应用程序.屏幕更新 = 1
33 结束功能
34
35'调用方式:
36 '例如锁定A1:F1
的内容 37 子测试()
38 保护范围(“A1:F1”)
39 结束子

3。疑难杂症

上面的代码本身没有问题,但是当我删除某一行(非锁定行)时,系统提示:“您正在尝试删除包含锁定单元格的行。锁定单元格在工作表上受到保护”无法删除”。

我们先来了解3个逻辑:

(1)如果某行中的任何一个单元格被设置为“锁定”,当工作表受到保护时,即使该行允许删除,实际上也无法删除。如果可以删除,工作表保护机制就会被破坏,工作表保护和单元格保护都将失去原有的功能。

(2)如果一行中所有单元格均未勾选“锁定”,则在工作表保护状态下勾选“允许删除行”即可删除该行。

(3)如果在保护工作表时没有勾选“允许删除行”,即使所有单元格都取消勾选“锁定”,也无法删除该行。

但我可以明确的是,我删除的行中的所有单元格都没有锁定,并且已设置为允许删除行。比如我设置第一行被锁定,其他所有单元格都不被锁定。理论上,除了第一行之外,都可以删除。但系统总是提示:“您正在尝试删除包含锁定单元格的行。当工作表受到保护时,锁定单元格无法删除。”

吃完饭,我以为问题解决了:原因是我在写VBA程序时调用了change事件。也就是说,整个change事件影响了系统的判断,系统以为我是在第一行进行锁定操作,但实际上我是在非第一行进行操作。因此,系统报错。

为了验证我的观点,我测试了另一个没有change事件的vba程序,确实可以正常删除。由此验证,change事件可能与锁定特定cell的代码不同步运行,内部可能存在矛盾机制。希望对有缘人有用!

4。参考资料

[1] http://www.sychzs.cn/content/17/0510/21/30583536_652812755.shtml

[2] https://www.sychzs.cn/en-us/office/vba/api/excel.worksheet.protect

[3] https://www.sychzs.cn/zh-cn/office/vba/api/excel.range.locked

[4] https://www.sychzs.cn/rooklyn21/article/details/22298657

-->

相关文章

最新资讯

热门推荐