使用VBA代码防止基于带有下拉列表的单元格内容在某些单元格中进行编辑
公平警告:完整的VBA新手在这里 我有一张要寄出的单子。表单有一个单元格(D8),其中从下拉列表中进行选择。根据该列表中的选择,我希望对工作表的某些区域进行锁定和解锁,以便他们可以填写的表单的唯一部分与D8中的选择相关。如果他们在下拉列表中输入“Montana”,我只希望表单中具有适用于该选项的区域的部分是可编辑的。然后,我将根据此下拉列表中的选择进行各种范围的锁定和解锁 以下是我到目前为止的情况:使用VBA代码防止基于带有下拉列表的单元格内容在某些单元格中进行编辑,vba,excel,Vba,Excel,公平警告:完整的VBA新手在这里 我有一张要寄出的单子。表单有一个单元格(D8),其中从下拉列表中进行选择。根据该列表中的选择,我希望对工作表的某些区域进行锁定和解锁,以便他们可以填写的表单的唯一部分与D8中的选择相关。如果他们在下拉列表中输入“Montana”,我只希望表单中具有适用于该选项的区域的部分是可编辑的。然后,我将根据此下拉列表中的选择进行各种范围的锁定和解锁 以下是我到目前为止的情况: Private Sub Worksheet_Change(ByVal Target As Ran
Private Sub Worksheet_Change(ByVal Target As Range)
If ActiveSheet.Cells(8, 4).Text = "Montana" Then
ActiveSheet.Range(Cells(14, 1), Cells(15, 6)).Locked = False
Else
ActiveSheet.Range(Cells(14, 1), Cells(15, 6)).Locked = True
End If
End Sub
但是,当我尝试测试范围是否已锁定时,即使满足条件,我仍可以在工作表受保护时编辑单元格。只要工作表未受保护,
locked
属性不会做任何事情。Excel对此进行了解释:调用格式单元格并选择“保护”选项卡
问题是,一旦单元格被锁定并且工作表受到保护,您就不能简单地将其解锁-您必须先解除工作表的保护。因此,您的代码可能如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
Const MySecretPassword = "Hallo"
If Intersect(Target, Cells(8, 4)) Is Nothing Then Exit Sub
On Error GoTo Protect
ActiveSheet.Unprotect MySecretPassword
If ActiveSheet.Cells(8, 4).Text = "Montana" Then
ActiveSheet.Range(Cells(14, 1), Cells(15, 6)).Locked = False
Else
ActiveSheet.Range(Cells(14, 1), Cells(15, 6)).Locked = True
End If
Protect:
ActiveSheet.Protect MySecretPassword
End Sub
注意,我添加了一个检查单元(8,4)是否被修改,而不是任何其他单元,以防止不必要的代码执行
另外请注意:由于您需要代码中的密码,您还必须
最后一点:记得解锁用户应该能够修改的所有单元格,尤其是你的“蒙大拿”单元格。那么,这样做有什么问题?你试过什么了吗?欢迎来到Stack Overflow。请显示您最近在解决此问题时的非工作尝试。查看代码的修复通常比阅读其他人的解决方案更有启发性。请参见,您必须保存文件才能生效锁定解锁。因此,添加代码来保存文件,如
ActiveWorkbook.save
那么如果我想添加多个不同的节来锁定,我将如何操作?只是用不同的词来编辑这个?我也不知道它在哪里引用了D8中的文本。