我正在使用以下方法创建数据验证列表:
sDataValidationList = sDataValidationList & wksCalculation.Cells(r, lActivityNoColumn).value & ","
然后我使用以下方法将其应用于单元格:
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=s
这在大多数情况下运行良好,但当任何wksCalculation.Cells(r, lActivityNoColumn).value
包含逗号时,那些字符串将被数据验证列表拆分,并且字符串的每个逗号分隔部分将显示为单独的项目。 / p>
当进入数据验证列表的某些值中包含逗号时,如何修改我的代码才有用?
答案 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
答案 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”。这看起来像逗号,但不会在验证中用于分隔。