我的情况是定义的表结构根据控件类型而改变(对于我的实例,它是一个产品品牌)。在该表中,有两个列/ fiel需要用于在同一工作表上填充两个数据验证单元格。这些细胞位于表格之上,并且理想情况下是#34;将用于根据填充数据验证单元格的数据过滤表格的信息。
Dim str As String
str = Join(UniqueValues(ws,srcrng), ",")
Dim val As Excel.Validation
Set val = range(destrng).Validation
val.Delete
val.Add xlValidateList, xlValidAlertStop, xlBetween, str
Above方法封装在一个方法中,该方法在VBA中传递了两个参数Table1[Column1]
和DataValidationCell1
。
只是为了避免任何问题,这是方法UniqueValues
逻辑:
Function UniqueValues(ws As Worksheet, col As String) As Variant
Dim rng As range: Set rng = ws.range(col)
Dim dict As New Scripting.Dictionary
If Not (rng Is Nothing) Then
Dim cell As range, val As String
For Each cell In rng.Cells
val = CStr(cell.Value)
If InStr(1, val, ",") Then
val = Replace(val, ",", Chr(130)) <-- Handles the fact i have commas in the field
End If
If Not dict.Exists(val) Then
dict.Add val, val
End If
Next cell
End If
'Return value as Variant Array
UniqueValues = dict.Items
End Function
在#3上,如果可能的话,我不想放置一个下拉列表。
答案 0 :(得分:1)
数据验证是一种限制在单元格(或一系列单元格)中输入哪种数据的方法http://office.microsoft.com/en-us/excel-help/apply-data-validation-to-cells-HP010072600.aspx
因此,您的问题并非针对数据验证。您的问题似乎是基于在该表顶部的两个单元格中输入的值来过滤表格(恰好应用了数据验证)。我对么?如果是这样的话:每次更改这些数据验证单元时,您将需要运行宏。您可以使用Sub Worksheet_Change(ByVal Target As Range)自动进行此操作,或者您可以使用“更新过滤器”按钮,该按钮稍微不那么“酷”。无论哪种方式,您只需要在宏中链接这两个单元格,并让它们根据这两个单元格的值更新表格中的过滤器。
这是一个宏的例子,可以像我描述的那样:
Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.AutoFilterMode = False
Range("A3:H20").AutoFilter
Range("A3:H20").AutoFilter Field:=2, Criteria1:=Range("A1").Text
End Sub
来自:http://www.ozgrid.com/forum/showthread.php?t=85547
希望这会有所帮助。祝你好运。