如何通过名称而不是索引为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

您可以使用Findfunction在标题行中查找“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