Excel VBA 从要在列表中使用的两个不同范围创建名称(数据验证)

冷南瓜

是否可以从两个不同的范围创建一个名称以用于列表(数据验证)?

我有两列:A包含第 1 行到第 3 行的内容,C包含第 1 行到第 4 行的内容。

我尝试使用,ThisWorkbook.Names.Add Name:="TheList", RefersTo:=Range("A1:A3,C1:C4")但是=TheList在数据验证字段中插入时,它说“列表源必须是分隔列表,或对单行或单列的引用”。

有没有办法组合两列的值?

彼得

由于 Excel 需要将一系列连续的值用作数据验证列表,因此您确实有两种选择。

  1. 在工作簿的未使用区域创建一个单独(可能链接)的连续值列。建议为范围添加定义的名称,但不是必需的。

对于这种方法,我会在“Z”列(或可能在另一个隐藏的工作表中)建立一个列表。下面是一个例子:

Option Explicit

Sub MakeValidationRange()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")

    Dim dataRange As Range
    Set dataRange = ws.Range("A1:A3,C1:C3")

    Dim valRange As Range
    Set valRange = ws.Range("Z1")

    Dim entry As Variant
    For Each entry In dataRange
        valRange.Formula = "=" & entry.Address
        Set valRange = valRange.Offset(1, 0)
    Next entry
    Set valRange = ws.Range("Z1").CurrentRegion

    '--- alternate method using a named range
    ThisWorkbook.Names.Add Name:="TheList", RefersTo:=valRange

    Dim dropDownCell As Range
    Set dropDownCell = ws.Range("B1")
    dropDownCell.Validation.Delete
    dropDownCell.Validation.Add Type:=xlValidateList, _
                                AlertStyle:=xlValidAlertStop, _
                                Formula1:="=TheList"

    '--- alternate method without creating a named range
    Set dropDownCell = ws.Range("B2")
    dropDownCell.Validation.Delete
    dropDownCell.Validation.Add Type:=xlValidateList, _
                                AlertStyle:=xlValidAlertStop, _
                                Formula1:="=(" & valRange.Address & ")"

End Sub
  1. 第二种方法是根本不使用其他范围,只需创建一个分隔列表。这使列表“硬编码”,但由于它是使用 VBA 创建的,因此在您的情况下可能不会成为障碍。

这其中的关键在于将列表定义为带等号.Validation.Add方法例如,验证列表将为没有双引号。空间不足。没有等号。这是示例:Red,Orange,Yellow,Green,Blue,Indigo,Violet

Option Explicit

Sub MakeValidationList()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")

    Dim dataRange As Range
    Set dataRange = ws.Range("A1:A3,C1:C3")

    Dim dataList As String
    Dim entry As Variant
    For Each entry In dataRange
        dataList = dataList & entry.Value & ","
    Next entry
    '--- remove the last trailing comma
    dataList = Left$(dataList, Len(dataList) - 1)

    Dim dropDownCell As Range
    Set dropDownCell = ws.Range("B3")
    dropDownCell.Validation.Delete
    dropDownCell.Validation.Add Type:=xlValidateList, _
                                AlertStyle:=xlValidAlertStop, _
                                Formula1:=dataList
End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用VBA的Excel验证下拉列表

来自分类Dev

在VBA和Excel中使用范围

来自分类Dev

VBA从Excel获取数据

来自分类Dev

比较日期范围Excel VBA

来自分类Dev

VBA中的减法范围(Excel)

来自分类Dev

Excel VBA在宏中使用范围

来自分类Dev

Excel VBA。查找范围异常

来自分类Dev

Excel VBA排序范围

来自分类Dev

Excel / VBA-遍历范围

来自分类Dev

VBA EXCEL范围语法

来自分类Dev

如何在Excel VBA中加入从两个不同数据源创建的两个记录集

来自分类Dev

vba Excel数据连接

来自分类Dev

如何在VBA Excel中使用我定义的范围名称?

来自分类Dev

Excel VBA创建下拉列表

来自分类Dev

使用Selenium的Excel VBA

来自分类Dev

Sub Excel VBA的可选范围

来自分类Dev

如何在Excel VBA中使用循环创建命名范围?

来自分类Dev

在VBA中使用SQL联接两个Excel工作簿中的数据(只读错误)

来自分类Dev

VBA Excel的处理范围与每个

来自分类Dev

在Excel VBA中使用“设置”设置范围

来自分类Dev

Excel VBA列表问题

来自分类Dev

使用VBA比较两个Excel工作表

来自分类Dev

VBA EXCEL范围语法

来自分类Dev

Excel VBA范围选择

来自分类Dev

在两个Sheets Excel VBA中更新数据

来自分类Dev

使用VBA筛选Excel数据

来自分类Dev

在Excel VBA中使用“(全部)”

来自分类Dev

如何在VBA Excel中使用我定义的范围名称?

来自分类Dev

无法使用两个参数获得 excel vba 函数