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

时间:2015-01-16 10:43:01

标签: excel vba excel-vba drop-down-menu

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

  1. DV列表中声明的第一个值
  2. 或DV列表中没有的值,例如Choose item from the list
  3. 如果我们希望用户对他的选择负责,第二个选项可能会有用。一旦用户点击数据验证单元格,他就被迫选择一些东西。没有选项可以保留默认值Choose item from the list,因为此类值不在验证列表中。所以用户以后不能说“我没投票”。

2 个答案:

答案 0 :(得分:3)

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

  • 选择第一行
  • 中的任何单元格
  • 使用Formulas创建命名范围(Name Manager> New...> Name:),例如validationRefers 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格式后,您将有以下选择:

here

请注意,在下拉列表中没有类似DropDownListToDefault的项目。如果您希望用户从下拉列表中选择某些内容,则只需在进一步处理中不接受默认值。