validation下拉条件

有点混乱写我的想法,但生病试一试。 这是我所能做的。 我在垂直单元格上有一个下拉列表,所以我有一个从[name] – > [define]和[data] – > [validation]链接的名称列表。 我想要的是另一个垂直单元格填充另一个下拉取决于第一个条件。

比如我有一份水果和蔬菜的清单。 我的第一个下拉菜单问的types,所以我select水果。 由于这样的select,我的第二个下拉菜单会给我一个水果的清单(不含蔬菜),反之亦然

您的帮助非常感谢。

感谢帮派!


如果我想命名细胞,而不是蔬菜,但2009年和水果2010年我得到一个错误。 有没有办法? 谢谢

让我们使用一些命名的范围。

名称E7“选项”

将“蔬菜”放入E4,将“水果”放入E5;

在E7中,Data> Validation> List,源$ E $ 4:$ E $ 5;

把一些蔬菜放入H4:H7; 名称范围“蔬菜”;

把一些水果放进J4:J7; 名称范围“水果”;

现在,在E8:Data> Validation> List中,源“= INDIRECT(option)”。

在E7中进行select时,E8的选项会相应设置。

这是我的代码,正是你所要求的。

我已经将独立列定义为名为Major_Category的命名区域,并将下拉validation设置为数据列表。 然后我有其他几个名为cat_subItems数据列表。 所以,对于你的例子,主要类别将有项目

  • 水果
  • 蔬菜

那么我定义了更多的名单叫

  • cat_fruit
  • cat_vegetable

其中将包含水果或蔬菜的名称。 然后,根据主要类别select,Worksheet_change事件将把下一列中的下拉validation更改为cat_fruitcat_vegetable

注意:如果你使用Excel的保护工作表,这段代码不会很好玩。 看到这个问题处理Excel的工作表/书保护。

 Public Sub Worksheet_Change(ByVal target As Range) On Error GoTo ErrHandler: Dim VRange As Range, cell As Range Dim msg As String Dim validateCode As Variant Dim modCell As Range Set VRange = Range("Major_Category") If Intersect(VRange, target) Is Nothing Then Exit Sub For Each cell In Intersect(VRange, target) b = cell.Value curRow = target.Row Set modCell = cell.Offset(0, 1) 'cell to modify the validation' If Not (b = "") Then modCell.Validation.Delete modCell.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 'sets the validation formula to the list/range name' xlBetween, Formula1:="=cat_" & b modCell.Validation.IgnoreBlank = True modCell.Validation.InCellDropdown = True modCell.Validation.InputTitle = "" modCell.Validation.ErrorTitle = "" modCell.Validation.ErrorMessage = "" modCell.Validation.ShowInput = True modCell.Validation.ShowError = True End If Next cell Cleanup: Exit Sub ErrHandler: MsgBox Err, vbOKOnly, "Error Occurred" Resume Cleanup: End Sub 

您无法命名范围“2009” – 因为Excel将无法区分2009年的整数值。还有一些其他限制 – 您无法命名范围“A1”,因为Excel会与单元格混淆A1。 你可以做的是在2009年和2010年在一个表中,并在他们旁边放置范围的名称,然后做一个VLOOKUP来获取范围名称。 或者,你可以使用,比如说“_2009”,并有你的公式

= INDIRECT(“_”&option)