锁定范围基于单元格值

时间:2017-04-29 17:13:27

标签: excel excel-vba integer locking vba

我正在尝试编写此VBA,以便如果单元格(U5)=“YES”,则范围(B5:T5)被锁定,否则范围(B5:T5)保持解锁状态。类似地,如果单元格(U6)=“是”,则范围(B6:T6)被锁定,否则范围(B6:T6)保持解锁状态,依此类推。不幸的是我的代码没有运行,我无法找到错误!请找我的错误!

my VBA code

1 个答案:

答案 0 :(得分:0)

从您的叙述中,我已经收集到,如果U列中的值被更改,您只需要执行任何操作,然后仅更改为U中已更改的行中B:T中的单元格。

如果U列中的单元格既不是“是”或“否”,则没有任何迹象表明会发生什么。如果您愿意,我会留下一个区域供您处理。

您在单元格的列号参数中使用i + 21。这意味着第一次循环通过它是U5。在第二次迭代,它现在是V6;在第三个W7等等。这不是你的叙述所说的,所以我按照叙述的指示并假设一个简单的编码错误。这也意味着(如果您之前已经完成了代码),您可能无意中被锁定了#39;错误的细胞。如果是这种情况,您可能只想开始新的工作表并删除您正在处理的工作表。

Worksheet.Protect methodUserInterfaceOnly的可选参数。设置为True时,用户受受保护工作表的限制,但没有类似的保护VBA代码。这意味着您无需.Unprotect工作表来运行代码。我已经添加了一个帮手'子程序;运行一次,然后您不必取消保护并重新保护工作表。

如果您选择不使用UserInterfaceOnly保护,请将.Protect和.Unprotect语句移到循环外部,以便不对每一行执行它们。

enter image description here