使用命名范围创建下拉列表

时间:2018-11-26 20:10:52

标签: excel vba

我在类似主题上所读的内容与我想做的相反。所以我想看看是否有可能。

目前,我有一个工作表,该工作表使用以下子项来创建一个以逗号分隔的名称字符串为基础的下拉列表

    Sub MakeList(ByRef r As Range, ByRef Config As String)

    r.Clear
    If Not Config = "" Then
        r.Select
            With Selection.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=Config
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .ShowInput = True
                .ShowError = True
            End With
    End If
    End Sub

在另一个应用程序中,我想将一个已经在工作簿中命名的范围应用于此范围。这样,当有人将单元格添加到命名范围时,下拉框将扩大。我看过一些有关动态范围以及如何在vba中命名范围的文章,但它们看起来都很丑陋且代码密集。

2 个答案:

答案 0 :(得分:1)

使用表/命名范围组合非常简单。只需将源数据放在表(ctrl + t)中,然后选择数据列并为其命名即可。然后将用于数据验证的列表源设置为新的命名范围。 这是一个快速教程,向您展示如何进行: https://www.excelcampus.com/tips/dynamic-data-validation/

答案 1 :(得分:1)

感谢@Mathieu Guindon提供解决方案。答案很简单,但我不知道精通能力的程度。

您可以通过使用Range("NameOfRange")作为String参数来调用子MakeList而不是遍历"=NameOfRange"并获取每个单元格的值。 Excel将自动使用您指定范围内的值填充列表。


编辑:

对于遇到此问题的任何人,命名范围必须是单个列或行中的连续范围。本质上,所有条件都适用,就好像您要在工作表中手动执行下拉列表一样。如果您指定的范围不满足此条件,则必须循环遍历并将这些值存储在以逗号分隔的字符串中,并通过上面的代码运行它。否则,您将得到一个错误。