在数据验证下拉列表中设置默认值
Setting default values in Data Validation drop-down list
我有许多带有下拉列表的数据验证 (DV) 单元格,我通过菜单 Data
> Data Validation
> list
设置了它们。 VBA 中是否有大量方法将它们全部设置为默认值?默认值我的意思是:
- DV 列表中声明的第一个值
- 或不在 DV 列表中的值,例如
Choose item from the list
.
如果我们希望用户对他的选择负责,第二个选项可能会有用。一旦用户点击数据验证单元格,他就被迫选择一些东西。没有保留默认值 Choose item from the list
的选项,因为该值不在验证列表中。所以用户以后不能说"I didn't vote"。
要在当前行中使用从第 C
列到 Z
列的偏移量:
- select 第一行中的任何单元格
创建一个命名范围 (Formulas
> Name Manager
> New...
) Name:
例如validation
和 Refers 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 -
这样的项目。如果您希望用户从下拉列表中选择某些内容,则在进一步处理时不要接受默认值。
我有许多带有下拉列表的数据验证 (DV) 单元格,我通过菜单 Data
> Data Validation
> list
设置了它们。 VBA 中是否有大量方法将它们全部设置为默认值?默认值我的意思是:
- DV 列表中声明的第一个值
- 或不在 DV 列表中的值,例如
Choose item from the list
.
如果我们希望用户对他的选择负责,第二个选项可能会有用。一旦用户点击数据验证单元格,他就被迫选择一些东西。没有保留默认值 Choose item from the list
的选项,因为该值不在验证列表中。所以用户以后不能说"I didn't vote"。
要在当前行中使用从第 C
列到 Z
列的偏移量:
- select 第一行中的任何单元格
创建一个命名范围 (
Formulas
>Name Manager
>New...
)Name:
例如validation
和Refers To:
将是您的公式:=OFFSET($C1;0;0;1;COUNTA($C1:$Z1))
- english-locale 用户,使用
,
而不是;
作为列表分隔符
- 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 -
这样的项目。如果您希望用户从下拉列表中选择某些内容,则在进一步处理时不要接受默认值。