Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VBA代码防止基于带有下拉列表的单元格内容在某些单元格中进行编辑_Vba_Excel - Fatal编程技术网

使用VBA代码防止基于带有下拉列表的单元格内容在某些单元格中进行编辑

使用VBA代码防止基于带有下拉列表的单元格内容在某些单元格中进行编辑,vba,excel,Vba,Excel,公平警告:完整的VBA新手在这里 我有一张要寄出的单子。表单有一个单元格(D8),其中从下拉列表中进行选择。根据该列表中的选择,我希望对工作表的某些区域进行锁定和解锁,以便他们可以填写的表单的唯一部分与D8中的选择相关。如果他们在下拉列表中输入“Montana”,我只希望表单中具有适用于该选项的区域的部分是可编辑的。然后,我将根据此下拉列表中的选择进行各种范围的锁定和解锁 以下是我到目前为止的情况: Private Sub Worksheet_Change(ByVal Target As Ran

公平警告:完整的VBA新手在这里

我有一张要寄出的单子。表单有一个单元格(D8),其中从下拉列表中进行选择。根据该列表中的选择,我希望对工作表的某些区域进行锁定和解锁,以便他们可以填写的表单的唯一部分与D8中的选择相关。如果他们在下拉列表中输入“Montana”,我只希望表单中具有适用于该选项的区域的部分是可编辑的。然后,我将根据此下拉列表中的选择进行各种范围的锁定和解锁

以下是我到目前为止的情况:

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中的文本。