Excel VBA“;“链接”;列表以获取特定数据

Excel VBA“;“链接”;列表以获取特定数据,excel,vba,Excel,Vba,我在这里问我的问题是因为我有点迷路了,没有合适的关键词在网上找到问题的答案 我有两张excel工作表。一个是数据库,另一个与之交互。在数据库中,我有多个header参数:Name、Code和其他三个参数,我们将调用这些参数来汇总数据。 在交互工作表中,我需要一个带有名称下拉列表的选择窗口,其中我将选择一个名称,以及一个带有代码下拉列表的选择窗口,其中我将选择一个与名称相关的代码。(有几个名称实例是相同的,但由于其唯一的代码而不同。)选择名称和正确的代码后,我的数据将加载到结果窗口中,该窗口将重新

我在这里问我的问题是因为我有点迷路了,没有合适的关键词在网上找到问题的答案

我有两张excel工作表。一个是数据库,另一个与之交互。在数据库中,我有多个header参数:Name、Code和其他三个参数,我们将调用这些参数来汇总数据。 在交互工作表中,我需要一个带有名称下拉列表的选择窗口,其中我将选择一个名称,以及一个带有代码下拉列表的选择窗口,其中我将选择一个与名称相关的代码。(有几个名称实例是相同的,但由于其唯一的代码而不同。)选择名称和正确的代码后,我的数据将加载到结果窗口中,该窗口将重新组合名称、代码和相应的数据

到目前为止,我通过以下方法成功地列出了其中包含的姓名:

Sub NameList()
    Range("A13").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=DB!$A$2:$A$800"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub
这里的问题是,它没有给我唯一的值,而且因为我有多个相似的名称,所以下拉列表很长而且令人困惑。至于代码,我必须自己找到,然后键入。一旦我点击“加载数据”按钮,我就可以得到我想要的结果窗口中的所有内容

总而言之,我的需要是: -在下拉列表中获取名称的唯一值 -获取与刚才选择的名称值对应的代码值


提前感谢您提供的任何形式的帮助。

我会这样做,以获得独特的价值观。
dic.add中的第二个参数可以添加相应行号的数组。然后,您的第一个列表将是
键的
join
,第二个列表将是
items
集合中包含的行号处的单元格的
join

参见本文


谢谢你的快速回答。我曾尝试将此解决方案应用于我的问题,但遇到错误“用户定义类型未定义”。作为VBA游戏中的新玩家,我不知道如何对此作出反应。您需要添加对它的引用,请查看链接中的早期绑定部分,因此我找到了它作为参考,但是,我在代码中遇到了问题,因为数据包含在另一个名为数据库的工作表中,使用您的解决方案,我不知道如何从另一个工作表调用它。抱歉,延迟了<代码>工作表(“数据库”)。范围(“AB1:AB10”)。单元格
Sub DynamicCombo()

Dim dic As New Scripting.Dictionary
Dim l As Long
Dim c As Excel.Range

    For Each c In Range("AB1:AB10").Cells
        If Not dic.Exists(CStr(c)) Then
            dic.Add CStr(c), c.value '  Use an array here to hold row #'s
        End If
    Next c

    With Range("AC1").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=Join(dic.Keys(), ",")
        .IgnoreBlank = True
        .InCellDropdown = True
        .ShowInput = True
        .ShowError = True
    End With
End Sub