我正在构建一个电子表格,其中包含供用户选择的数据验证下拉列表。根据某些预定义条件,从(隐藏)选项卡上的命名区域填充下拉列表。
数据范围的提取(当前> 500行)是
| Type | Code | Description | Start Date | End Date | Status |
| A | 001 | IT | 01/01/2016 | 31/12/2016 | O |
| A | 002 | HR | 31/10/2017 | 31/12/2018 | O |
| A | 003 | Payrol | 01/01/2016 | 31/12/2016 | O |
| A | 004 | Marketing | 01/01/2016 | 31/12/2016 | C |
| B | 110 | Technical Review | 01/01/2016 | 31/12/2016 | O |
并且位于命名范围'代码数据'
我想使用来自数据范围的VBA在代码列中填充数据验证下拉列表,其中:
我尝试使用ODBC / SQL但运行良好但启动缓慢 - 我认为在查询之前它正在连接到数据范围
有更快/更好的方法吗?
答案 0 :(得分:0)
我认为数据验证需要一个连续的范围,因此您可能需要首先过滤然后将结果单元格移动到其他位置,否则数据验证将包含隐藏的单元格,类似于此(显然修改为您自己的工作表和范围):
Sub someMacro()
With Sheets("Sheet1")
With .Range("a1:f6")
.AutoFilter Field:=1, Criteria1:="A"
.AutoFilter Field:=6, Criteria1:="O"
.AutoFilter Field:=4, Criteria1:="<" & Date
.AutoFilter Field:=5, Criteria1:=">" & Date
End With
.Range(.Range("b2"), .Range("b2").End(xlDown)).Copy
.Range("g1").PasteSpecial xlPasteValues 'Put this whereever is suitable, don't forget to add something in to delete this with each run
.Range("h1").Validation.Add Type:=xlValidateList, Formula1:="='Sheet1'!" & .Range(.Range("g1"), .Range("g1").End(xlDown)).Address 'I've validated cell h1, change this to whatever
End With
End Sub