我有一个名为table" Table1"。列名称包含名称,列姓氏包含姓氏。我希望列名称中的值在下拉列表中可用。出于某种奇怪的原因,我使用公式
"=Table1[Name]"
它会返回错误,但是当我创建一个命名公式
时rngNames = "=Table1[Name]"
我可以将它用作数据验证的源代码。我不明白为什么它不接受普通公式,但需要包含在命名公式中,但至少我得到了这部分工作。
我想要做的下一步是拥有" Surname,Name"可用于下拉列表。我不想(不能)在表格中添加额外的列。我做的是我创建了另一个命名公式
rngFullNames = "=Table1[Surname] & ", " & Table1[Name]"
在“名称管理器”窗口中,它似乎有效 - 我可以在“值列”中看到这样的列表:
{"Smith, John"; "Black, Joe",...}
但是当我尝试在数据验证中使用它时,它会返回错误。有关如何从两个表列创建下拉数据验证的任何建议,而没有明确创建一个额外的列来组合这两个?
答案 0 :(得分:1)
数据验证无法使用excel错误消息中引发的不同列表/范围: 列表源必须是分隔列表,或对单个行或列的引用。
但是你可以使它适用于VBA:
Sub DataValidation()
Dim LastRow As Long
LastRow = Range("A" & Rows.Count).End(xlUp).Row
Dim MyList() As String, k As Integer
ReDim MyList(LastRow)
For k = 2 To LastRow
MyList(k) = CStr(Range("A" & k).Value & "; " & Range("B" & k).Value)
Next k
With Range("L2").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:=Join(MyList, ",")
End With
End Sub
在我的代码中,数据验证将在L2中输入,具有姓氏的列从A2到最后一行,具有名称的列是B2到最后一行。
告诉我它是否有效,我很乐意调整它。
注意:不知何故,它不适用于“,”。使用“,”将名称和姓氏放在彼此之下而不是一起。这不是正常数据验证中唯一的问题。
答案 1 :(得分:0)
数据验证不支持组合列。
一件小事。如果要在数据验证中使用表格列,请将其与=INDIRECT("Table1[Name]")
一起使用,即:
if (-1 == xmlFile.FullName.IndexOf("\\prog\\"))
continue;