使用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。

我想你可以从这里拿走它。

哈维