如何根据另一个下拉列表单元格冻结Excel中的下拉列表单元格,并为其指定默认值?

如何根据另一个下拉列表单元格冻结Excel中的下拉列表单元格,并为其指定默认值?,excel,vba,excel-2019,Excel,Vba,Excel 2019,我的excel工具允许我计算价格。 有一个下拉列表单元格指示产品,另一个下拉列表单元格指示应该交付的城市,但我想做的是,如果为产品选择了某个值,则冻结country单元格(将其设置为一个值) 使用Excel 2019您正在查找工作表。保护和范围。锁定 一旦用户输入了产品的值,并且希望锁定国家/地区单元格,则需要执行以下操作: Activesheet.Unprotect Range("Everything Except Country").Locked = False Rang

我的excel工具允许我计算价格。 有一个下拉列表单元格指示产品,另一个下拉列表单元格指示应该交付的城市,但我想做的是,如果为产品选择了某个值,则冻结country单元格(将其设置为一个值)


使用Excel 2019

您正在查找工作表。保护和范围。锁定

一旦用户输入了产品的值,并且希望锁定国家/地区单元格,则需要执行以下操作:

Activesheet.Unprotect
Range("Everything Except Country").Locked = False
Range("Country").Locked = True
Activesheet.Protect
Private Sub Worksheet_Change(ByVal Target As Range)

if Target.Address = Range("Product").Address then
   Activesheet.Unprotect
   Range("Everything Except Country").Locked = False
   Range("Country").Locked = True
   Activesheet.Protect
end if

End Sub

保护图纸后,所有单元格的默认值都将锁定,因此您只需定义仍应可编辑的区域。如果要在用户输入更多数据时继续锁定其他单元格,则需要取消对工作表的保护,重新定义锁定的范围,然后重新保护工作表

我建议将工作表更改事件与以下内容一起使用:

Activesheet.Unprotect
Range("Everything Except Country").Locked = False
Range("Country").Locked = True
Activesheet.Protect
Private Sub Worksheet_Change(ByVal Target As Range)

if Target.Address = Range("Product").Address then
   Activesheet.Unprotect
   Range("Everything Except Country").Locked = False
   Range("Country").Locked = True
   Activesheet.Protect
end if

End Sub


您可能还需要添加一个事件或按钮,以便工作表可以重置为所有未受保护的单元格。

我真的不知道如何将其应用于我的数据。如果我有一个产品的下拉列表{戒指、耳环、项链}和另一个国家的下拉列表{法国、德国、西班牙、意大利},当在其他单元格C18中时我该怎么办?例如,当选择戒指时,国家单元格C20只能是法国?
单元格C18和C20不是初始下拉单元格,为了计算最终结果,它们是分开的price@BrokenStrings我不知道你的意思,但是如果你想根据其他细胞的输入来冷冻细胞,那么我的解决方案就是你想要的。您只需要根据用户输入的内容动态确定要保护和取消保护的范围。我建议将受保护的范围和不受保护的范围保留为模块级变量,以便在事件之间保存并易于修改。