如何通过名称而不是索引为VBA的自动筛选function指定一个列?
我是VBA新手,尝试自动筛选列范围。 该列被命名为“Vlookup”,并位于索引位置27。
rData.AutoFilter field:=27, Criteria1:="Class" ' filter criterion
为了使这个dynamic,我需要能够根据列名而不是列索引进行过滤。
但是,当我这样做
rData.AutoFilter field:=Application.Match("Vlookup", Selection.Rows(1), 0), Criteria1:="Class" ' filter criterion
我屈服
运行时错误“424” – 对象必需
如何在VBA中按列名正确自动Autofilter
?
您可以使用Find
function在标题行中查找“Vlookup”,然后检索Column
的数值。
注意 :不需要使用Selection
,而是使用rData
表单对象(使用With rData
语句)完全限定Rows(1)
)。
请参阅下面的代码和评论:
Dim FindRng As Range Dim FiltCol As Long With rData Set FindRng = .Rows(1).Find(what:="Vlookup") If Not FindRng Is Nothing Then ' Find was successful FiltCol = FindRng.Column ' get the column number where "Vlookup" was found Else ' find unable to find "Vlookup" MsgBox "Find Error!" Exit Sub End If .AutoFilter Field:=FiltCol, Criteria1:="Class" ' filter criterion End With
您可以使用帮助器UDF,它将返回列的索引:
Function GetIndex(colName As String) GetIndex = WorksheetFunction.Match(colName, ActiveSheet.AutoFilter.Range.Rows(1), 0) End Function
UPD
你可以用你的工作表replaceActiveSheet
。