创build数据validation列表,当一些值有逗号?

我正在使用以下方法创build数据validation列表:

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

然后我将它应用到一个单元格使用:

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

这在大多数情况下都能正常工作,但是当任何wksCalculation.Cells(r, lActivityNoColumn).value包含逗号时,那些string将被数据validation列表分割,并且每个逗号分隔的string部分都显示为一个单独的项目。

我怎样才能修改我的代码也有用,当进入数据validation列表中的一些值在它们中有逗号?

在使用Type:=xlValidateList的数据validation中, Formula1可以是以逗号分隔的列表,也可以是对该列表范围的引用的公式string。 在逗号分隔的列表中,逗号具有特殊意义。 在一个范围的参考它没有。

所以假设你从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) 

也应该工作。

你将不得不欺骗Excel;)

这是一个例子。 将该逗号replace为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 

在这里输入图像说明

创build一个包含您的列表项目的命名范围ValidValues ; 在数据validation公式中使用该命名范围=ValidValues 。 如果有效值的数量可以改变,我build议你使命名范围引用一个表列,像SomeTable[SomeColumn] – 这样的方式,该列中的任何新值将自动成为命名范围的一部分,因此,自动添加到有效值的列表。