我有许多数据验证(DV)单元格,下拉列表是我通过菜单Data
>设置的。 Data Validation
> list
。 VBA中有一种批量方式可以将它们全部设置为默认值吗?默认值我的意思是:
Choose item from the list
。如果我们希望用户对他的选择负责,第二个选项可能会有用。一旦用户点击数据验证单元格,他就被迫选择一些东西。没有选项可以保留默认值Choose item from the list
,因为此类值不在验证列表中。所以用户以后不能说“我没投票”。
答案 0 :(得分:3)
要使用当前行中C
列到Z
的偏移量:
使用Formulas
创建命名范围(Name Manager
> New...
> Name:
),例如validation
和Refers To:
将是您的公式:
=OFFSET($C1;0;0;1;COUNTA($C1:$Z1))
,
代替;
作为列表分隔符 选择单元格并应用Data Validation
>允许:List
,来源:=validation
当您在第二行中选择一个单元格并观察Name Manager
时,您会注意到该公式使用了对当前行的相对引用。
要使用默认值填充单元格,您可以使用以下公式(作为单元格内的常规公式,它与数据验证功能无关):
=INDEX(validation, 1)
当您从下拉列表中实际选择一个值时,该公式将被所选值覆盖,因此当您更改列表中的第一项时,对于显式选定的单元格,该值不会更改。
答案 1 :(得分:3)
这就是我最终的结果。
is not a valid initializer for JSQMessagesBubbleImage. Use initWithMessageBubbleImage:highlightedImage: instead.'
函数HasValidation从https://db.apache.org/ddlutils/api/org/apache/ddlutils/model/TypeMap.html被盗。
运行宏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
后,点击DV格式后,您将有以下选择:
请注意,在下拉列表中没有类似DropDownListToDefault
的项目。如果您希望用户从下拉列表中选择某些内容,则只需在进一步处理中不接受默认值。