当某些值有逗号时创建数据验证列表?

时间:2015-06-09 06:08:56

标签: excel vba validation excel-vba

我正在使用以下方法创建数据验证列表:

sDataValidationList = sDataValidationList & wksCalculation.Cells(r, lActivityNoColumn).value & ","

然后我使用以下方法将其应用于单元格:

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=s

这在大多数情况下运行良好,但当任何wksCalculation.Cells(r, lActivityNoColumn).value包含逗号时,那些字符串将被数据验证列表拆分,并且字符串的每个逗号分隔部分将显示为单独的项目。 / p>

当进入数据验证列表的某些值中包含逗号时,如何修改我的代码才有用?

4 个答案:

答案 0 :(得分:5)

你必须使用Trick Excel;)

这是一个例子。将该逗号替换为ASC代码为0130

的类似外观字符
Dim dList As String

dList = Range("B14").Value

'~~> Replace comma with a similar looking character
dList = Replace(dList, ",", Chr(130))

With Range("D14").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:=dList
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With

enter image description here

答案 1 :(得分:4)

在使用Type:=xlValidateList进行数据验证时,Formula1可以是逗号分隔列表,也可以是公式字符串,它是对具有该列表的范围的引用。在逗号分隔的列表中,逗号具有特殊含义。在对范围的引用中它没有。

因此,假设您从wksCalculation.Cells(r, lActivityNoColumn)连接的列表位于Sheet2!A1:A5然后

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Sheet2!A1:A5"

会奏效。

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=" & wksCalculation.Range("A1:A5").Address(External:=True)

也应该有用。

答案 2 :(得分:2)

创建包含列表项的命名范围ValidValues;在数据验证公式=ValidValues中使用该命名范围。如果有效值的数量可以更改,我建议您将命名范围引用到表列,如SomeTable[SomeColumn] - 这样,该列中的任何新值都将自动成为命名范围的一部分,从而自动添加到有效值列表。

答案 3 :(得分:0)

您可以使用ASCI字符“ ALT-0130”。这看起来像逗号,但不会在验证中用于分隔。