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

use*_*776 4 validation excel vba excel-vba

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

sDataValidationList = sDataValidationList & wksCalculation.Cells(r, lActivityNoColumn).value & ","
Run Code Online (Sandbox Code Playgroud)

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

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=s
Run Code Online (Sandbox Code Playgroud)

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

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

Sid*_*out 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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Axe*_*ter 4

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

假设您要连接的列表wksCalculation.Cells(r, lActivityNoColumn)位于Sheet2!A1:A5then

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Sheet2!A1:A5"
Run Code Online (Sandbox Code Playgroud)

将工作。

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

应该也有效。