我正在尝试使用vba代码创建数据验证列表。数组根据许多变量生成自己。
这是我正在使用的代码
For iter4 = 2 To nbWsheet
If Wsheet.Cells(iter4, 2) = Cat And Wsheet.Cells(iter4, ColMod) = "x" And Wsheet.Cells(iter4, ColStd) = "oui" Then
TableValue = Wsheet.Cells(iter4, 4).Value & " - " & Wsheet.Cells(iter4, 7).Value
Table = Table & "," & TableValue
End If
Next iter4
'Ajout de la list
With Cells(iGlob, 5).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=Table
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = ""
.ShowError = ""
End With
此代码的问题是表中的文本包含","。生成数据验证列表时,每次看到","它把文字放在新的一行......
有没有办法保持","在桌子里面
我要显示的内容的例子:123456 - Engine,300HP
希望我很清楚,
谢谢,
答案 0 :(得分:3)
我认为自定义列表中的逗号没有转义字符。根据{{3}},逗号始终将条目分开。
一种解决方法是使用动态命名范围。
=OFFSET(DV_ListTable,1,0,IF(COUNTA(DV_ListColumn)-1=0,1,COUNTA(DV_ListColumn)-1))
{现在数据验证将是(单元格D1):
MSDN Validation.Add
然后用于更改此动态范围内容的宏将是:
Option Explicit
Sub ChangeDataValidationList()
Dim i As Long, Table As String, TableValue As String
Dim oRng As Range, oValues As Variant
With ThisWorkbook
' Build up the new table list
Table = .Names("DV_ListTable").RefersToRange.Value ' Header
' For Demo, the data is from Columns next to the DV_ListTable
Set oRng = .Names("DV_ListTable").RefersToRange.Offset(0, 1)
Do Until IsEmpty(oRng)
TableValue = oRng.Value & " - " & oRng.Offset(0, 1).Value
Table = Table & vbCrLf & TableValue
Set oRng = oRng.Offset(1, 0)
Loop
Set oRng = Nothing
' Clear the contents in the column
.Names("DV_ListColumn").RefersToRange.ClearContents
' Paste in the values separated by vbCrLf
oValues = Application.Transpose(Split(Table, vbCrLf))
.Names("DV_ListTable").RefersToRange.Resize(UBound(oValues)) = oValues
Set oValues = Nothing
End With
End Sub
执行“ChangeDataValisationList”后的示例屏幕截图:
希望这可以帮助您找到正确的解决方向。
答案 1 :(得分:0)
用Chr(44)替换“,”。 Chr函数根据VBA字符代码返回一个字符串。我发现当你想插入一个双引号(Chr(34)为双引号)时它也会派上用场。