首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何按名称而不是按索引为VBA的自动筛选函数指定列?

如何按名称而不是按索引为VBA的自动筛选函数指定列?
EN

Stack Overflow用户
提问于 2017-12-04 17:13:35
回答 3查看 5.6K关注 0票数 2

我是VBA新手,正在尝试自动筛选列范围。该列被命名为"Vlookup“,位于索引位置27。

代码语言:javascript
复制
rData.AutoFilter field:=27, Criteria1:="Class" ' filter criterion

为了使其动态化,我需要能够根据列名而不是列索引进行过滤。

但是,当我这样做的时候

代码语言:javascript
复制
rData.AutoFilter field:=Application.Match("Vlookup", Selection.Rows(1), 0), Criteria1:="Class"  ' filter criterion

我投降了

运行时错误'424‘-需要对象

如何在VBA中按列名正确地 Autofilter

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-20 03:44:50

不知道您选择了什么选项,但我们遇到了类似的问题,我们发现只需使用表存储数据,然后使用Field:=Listobject.ListColumns(“列名”).Index就可以了。这样,您的解决方案就是动态的。

代码语言:javascript
复制
Set rData = Workbooks("Workbook Name").Worksheets("Sheet Name").Listobjects("Table Name")
rData.DataBodyRange.AutoFilter field:=rData.ListColumns("Vlookup").Index, Criteria1:="Class"
票数 5
EN

Stack Overflow用户

发布于 2017-12-04 17:17:29

您可以使用Find函数在标题行中查找"Vlookup“,然后检索Column的数值。

注意:不需要使用Selection,而是使用rData工作表对象完全限定您的Rows(1) (使用With rData语句)。

请参阅下面的代码和注释:

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2017-12-04 17:20:26

您可以使用helper UDF,它将返回列的索引:

代码语言:javascript
复制
Function GetIndex(colName As String)
    GetIndex = WorksheetFunction.Match(colName, ActiveSheet.AutoFilter.Range.Rows(1), 0)
End Function

更新

您可以用您的工作表替换ActiveSheet

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47629885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档