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包含逗号时,那些字符串将被数据验证列表拆分,并且字符串的每个逗号分隔部分将显示为单独的项目.
当进入数据验证列表的某些值中包含逗号时,如何修改我的代码才有用?
你将不得不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)

在数据验证中,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)
应该也有效。