使用VBA创build多个从属列表
我必须使用VBA基于列D中的值在F&G列中的下列行上填充依赖列表,这意味着如果我在第5行中说“A”,那么我需要分配与“A”相关的依赖列表在相应的F&G栏中。
以下是组“A”的数据
以下是“B”组的数据
由于列“A”有重复的数据,我筛选唯一的并将它们转换为列“E”作为标题,并使用下面的代码来为它们分配一个命名范围“标题”。
Set Rng = Range(Cells(7, 5), Cells(7, 7)) Rng.Select Set ws = Sheets("tempdump") ActiveWorkbook.Names.Add Name:="header", RefersToR1C1:=Rng
然后,我模拟“SHIFT + Ctrl + F3”命令,将下面的代码分配给每个列表的第一个值作为该组的标题。
Range(Cells(7, 5), Cells(7, 10)).Select Selection.CreateNames top:=True, Left:=False, bottom:=False, Right:= _ False
现在我要去上一张表,我想从属列表(第一图像)。
在单元格F5中,我将创build一个从属列表,并使用以下代码的直接函数。
Sheets("Not Filled").Activate Cells(7, 8).Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=header" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With Cells(7, 9).Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=indirect(F5)" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With
我能够使用VBA创build基于命名范围的从属列表。 一切安好。 问题开始时,我必须对组“B”做同样的事情这个问题是因为组“A”和“B”所需的命名范围是90%相同。 在执行“Shift + CTRL + F3”操作时,分配给组B和组A的列表的名称是相同的,因为两个头具有相同的值,这导致从属列表填充来自组A的列表中的值而不是B组
为了更清楚我想第一个列表相同的标题,但从属列表应该是不同的,这是不会发生的。
理想情况下,第二个清单的价值应该是
- Data_Related
- 不兼容的数据
- 过时的数据
- 损坏的数据
在这里过两个星期,任何数量的帮助对我来说都是巨大的感谢..
只是要清楚:
input到AssignedGroup列中的值必须使用原因和类别列中的“数据validation”下拉列表来更改为用户提供的值列表。
我想我明白你在做什么,但我会以不同的方式做到这一点。
考虑:
你需要维护两个列表
List1具有允许用户input到Cause列中的值列表List2具有允许用户input到Category列中的值列表
上面列表中的值取决于当前行和为分配组input的值。
所以当用户点击一个新行或更改AssignedGroup列中的值时,您需要更改列表中的值。 (您可以使用工作表worksheet_change事件和workksheet_selectionChange事件来处理此事)
所以,你并不需要在列上重新创buildvalidation规则,而是需要重新获得基础值的表格。
由于重复原因,我会写代码维护一个单独的表(您可能会使用数据透视表自动执行此操作)。 其中只有两列:AssignedGroup和Cause。
我想你可以从这里拿走它。
哈维