使用VBA创建多个从属列表

时间:2015-08-06 10:01:02

标签: excel vba excel-vba

我必须在F&列中的以下行填充依赖列表。 G使用VBA基于D列中的值,这意味着如果我在第5行中说“A”,那么我需要在相应的F&中分配与“A”相关的依赖列表。 G栏。

enter image description here

以下是“A”组的数据

enter image description here

以下是“B”组的数据

enter image description here

由于列“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中,我创建一个从属列表,并使用带有以下代码的in direct函数。

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基于命名范围创建依赖列表。一切都好。   当我必须为组“B”做同样的事情时,问题就开始了   这个问题是因为组“A”和“A”所需的命名范围   “B”是90%相同。在执行“Shift + CTRL + F3”操作时,分配给组B和组A的列表的名称是相同的,因为两个标头具有相同的值,这导致从属列表填充组A列表中的值而不是B组。

为了更清楚,我希望第一个列表具有相同的标题,但依赖列表应该是不同的,这是不会发生的。

enter image description here

enter image description here

理想情况下,第二个列表的值应为

  • Data_Related
  • 不兼容的数据
  • 过时数据
  • 损坏的数据

在这里待了两个星期,任何数量的帮助对我来说都很重要,谢谢......

1 个答案:

答案 0 :(得分:1)

要明确:

输入AssignedGroup列的值必须使用cause和category列中的Data Validation下拉列表更改提供给用户的值列表。

我想我明白你在做什么,但我会以不同的方式做到这一点。

考虑:

您需要维护两个列表

List1具有允许用户在“原因”列中输入的值列表 List2具有允许用户在“类别”列中输入的值列表

上面列表中的值取决于当前行和为指定组输入的值。

因此,当用户单击新行或更改AssignedGroup列中的值时,您需要更改列表中的值。 (您可以使用工作表worksheet_change事件和workksheet_selectionChange事件来管理此事件)

因此,您确实不需要在列上重新创建验证规则,而是需要重新创建基础值表。

由于原因重复,我会编写维护单独表的代码(您可能会使用数据透视表自动执行此操作)。其中只有两列:AssignedGroup和Cause。

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

哈维