基本逻辑不赋值。手动操作流程为:
1。取消所有单元格的“锁定”格式
CTRL+A,选择所有单元格→右键→设置单元格格式→保护→取消选中并锁定
2。选择指定单元格(需要锁定的单元格)→右键→设置单元格格式→保护→勾选锁定
3。点击“审阅”→保护工作表→选中下面所有复选框→确定→输入密码→再次输入密码
上面的代码本身没有问题,但是当我删除某一行(非锁定行)时,系统提示:“您正在尝试删除包含锁定单元格的行。锁定单元格在工作表上受到保护”无法删除”。
我们先来了解3个逻辑:
(1)如果某行中的任何一个单元格被设置为“锁定”,当工作表受到保护时,即使该行允许删除,实际上也无法删除。如果可以删除,工作表保护机制就会被破坏,工作表保护和单元格保护都将失去原有的功能。
(2)如果一行中所有单元格均未勾选“锁定”,则在工作表保护状态下勾选“允许删除行”即可删除该行。
(3)如果在保护工作表时没有勾选“允许删除行”,即使所有单元格都取消勾选“锁定”,也无法删除该行。
但我可以明确的是,我删除的行中的所有单元格都没有锁定,并且已设置为允许删除行。比如我设置第一行被锁定,其他所有单元格都不被锁定。理论上,除了第一行之外,都可以删除。但系统总是提示:“您正在尝试删除包含锁定单元格的行。当工作表受到保护时,锁定单元格无法删除。”
吃完饭,我以为问题解决了:原因是我在写VBA程序时调用了change事件。也就是说,整个change事件影响了系统的判断,系统以为我是在第一行进行锁定操作,但实际上我是在非第一行进行操作。因此,系统报错。
为了验证我的观点,我测试了另一个没有change事件的vba程序,确实可以正常删除。由此验证,change事件可能与锁定特定cell的代码不同步运行,内部可能存在矛盾机制。希望对有缘人有用!
[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
-->