【发布时间】:2020-09-05 16:22:21
【问题描述】:
提前感谢您的帮助。
简短版:
需要这样才能根据该行中第一个单元格包含的内容锁定表格中的特定单元格。
用于确定行中其他单元格是否被锁定的单元格需要始终保持解锁状态
我正在处理一个包含表格的 Excel 工作表。该表用于记录产品的关键信息,每天更新。每个产品都在其自己的行中定义,列用于显示详细信息,例如“图纸编号”和“客户”等。 根据产品处于开发阶段的阶段以及产品完成后的进展情况,它将用列表中的单个“状态”进行标记,例如“正在进行”、“不良产品”、“已归档”等。 enter image description here 在每一行的每个单元格中,单元格包含的文本是通过列表形式的数据验证或手动输入来确定的。例如,客户列中的所有单元格将使用下拉菜单从列表中选择客户,但是图纸编号列中的单元格始终是其中一种,因此需要手动输入。
由于有如此多的人访问和编辑此表格,因此存在误点击和键入问题,这会导致数据被覆盖而没有人注意到他们已经这样做了。 由于这个问题,我希望能够根据行中第一个单元格包含的内容(“状态”列)锁定一行中的特定列。
在状态列包含“已归档”一词的情况下,我想锁定整行以防止其内容被更改。
如果单词是“正在进行”,我想锁定该行中的 AA 和 AB 列。
由于一个已知的错误,有时需要返回并编辑信息,所以我需要它,所以 State 列始终保持解锁状态,无论它包含什么。
我附上了一份经过编辑的 Excel 表,其中包含我对编码解决方案的尝试。 https://drive.google.com/open?id=1rzTp0ur1tpXIY_Wa3cVlcwruJ7Q1rT 代码也可以在下面看到。 注意:我什至不确定如何满足“正在进行”条件的要求,所以如果有人能指出我正确的方向,我将不胜感激
Sub Locking()
Dim KeyCells As Range
Set KeyCells = Range("A3:A612")
For Each cell In Range("A3:A612")
If cell.Value = "Archived" Then
cell.EntireRow.Locked = True
ElseIf cell.Value = "Ongoing" Then
cell.EntireRow.Locked = False
ElseIf cell.Value = "Bad" Then
cell.EntireRow.Locked = False
End If
Next cell
End Sub
这是我在这里的第一篇文章,因为我无法通过查看几个不同的堆栈溢出问题找到解决方案。我还观看了许多有关 VBA 代码的视频,但肯定缺少一些东西,并且正在努力弄清楚它是什么。
如果我发布的内容有误或额外的细节会有所帮助,请告诉我。
非常感谢任何和所有帮助!
谢谢
编辑:代码现在可以工作了
【问题讨论】: