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_fruit
或cat_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)