在数据验证下拉列表中设置默认值

Setting default values in Data Validation drop-down list

我有许多带有下拉列表的数据验证 (DV) 单元格,我通过菜单 Data > Data Validation > list 设置了它们。 VBA 中是否有大量方法将它们全部设置为默认值?默认值我的意思是:

  1. DV 列表中声明的第一个值
  2. 或不在 DV 列表中的值,例如 Choose item from the list.

如果我们希望用户对他的选择负责,第二个选项可能会有用。一旦用户点击数据验证单元格,他就被迫选择一些东西。没有保留默认值 Choose item from the list 的选项,因为该值不在验证列表中。所以用户以后不能说"I didn't vote"。

要在当前行中使用从第 C 列到 Z 列的偏移量:

  • select 第一行中的任何单元格
  • 创建一个命名范围 (Formulas > Name Manager > New...) Name: 例如validationRefers To: 将是您的公式:

    =OFFSET($C1;0;0;1;COUNTA($C1:$Z1))
    
    • english-locale 用户,使用 , 而不是 ; 作为列表分隔符
  • select 单元格并应用 Data Validation > 允许:List,来源:=validation

当您 select 第 2 行的一个单元格并观察 Name Manager 时,您会注意到该公式正在使用对当前行的相对引用。


要使用默认值填充单元格,您可以使用以下公式(作为单元格内的普通公式,它与数据验证功能没有任何关系):

=INDEX(validation, 1)

并且当您实际 select 下拉列表中的值时,公式将被 selected 值覆盖,因此当您更改列表中的第一项时,明确 selected 单元格的值不会改变。

这就是我的结局。

Sub DropDownListToDefault()
    Dim oCell As Range

    For Each oCell In ActiveSheet.UsedRange.Cells
        If HasValidation(oCell) Then
            oCell.Value = "'- Choose from the list -"
        End If
    Next
End Sub

Function HasValidation(cell As Range) As Boolean
    Dim t: t = Null

    On Error Resume Next
    t = cell.Validation.Type
    On Error GoTo 0

    HasValidation = Not IsNull(t)
End Function

函数 HasValidation 是从 here 中窃取的。

在 运行 宏 DropDownListToDefault 之后单击 DV 单元格后,您将有以下选择:

请注意,在下拉列表中没有像 - Select from the list - 这样的项目。如果您希望用户从下拉列表中选择某些内容,则在进一步处理时不要接受默认值。