vba - 当我不确定它将是哪一列时,如何自动过滤?

标签 vba excel

我正在尝试自动处理各种报告,我只需要过滤和计算行数。我目前有一个 PowerShell 脚本,可以打开每个报告并运行一些宏。它只是处于工作状态,但我现在想让它变得更智能并捕捉一些失败,所以我可能会问一些问题,但我会坚持每个问题。

报告具有相似但不完全相同的布局。我正在寻找一个特定的列名然后自动过滤。我有一个非常基本且组合在一起的宏,目前可以执行此操作,并且(大部分时间)有效,例如,有时我想要的列是 A 或 B:

If Worksheets(1).Range("A1") Like "*word" Then
    Worksheets(1).Range("A1").AutoFilter Field:=1, Criteria1:="=criteria1", Operator:=xlOr, Criteria2:="=criteria2"

ElseIf Worksheets(1).Range("B1") Like "*word" Then
    Worksheets(1).Range("A1").AutoFilter Field:=2, Criteria1:="=criteria", Operator:=xlOr, Criteria2:="=criteria2"

希望这可以为您提供当前的图片。

我现在想要搜索我正在寻找的字段标题,然后过滤该列,因此如果将来报告格式发生变化,我的宏不会中断。类似于:
ColNum = Application.Match("*header", Range("A:Z"), 0)
ColNumInt = CInt(ColNum)

If ColNumInt > 0 Then
    ActiveSheet.Range("A1").AutoFilter Field:=ColNumInt, Criteria1:="=criteria1*", Operator:=xlAnd
End If

但这给出了一个错误“范围类的自动过滤方法失败”,Googlefu 说要关闭过滤器,但它们已经关闭了。所以我有点卡住了。

最佳答案

这部分总是会失败:

ColNum = Application.Match("*header", Range("A:Z"), 0)

因为匹配只适用于一行或一列。所以你的代码实际上是返回错误 2042,然后由 CInt 转换为 2042。我猜你没有那么多数据列,因此自动过滤器失败了。利用:
ColNum = Application.Match("*header", Range("A1:Z1"), 0)
If Not IsError(ColNum) Then
...
End If

关于vba - 当我不确定它将是哪一列时,如何自动过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32882229/

相关文章:

vba - 运行时错误 '13' : Type mismatch on WorksheetFunction. CountIf 当实际的 Excel 公式(具有类似语法)完美运行时

excel - Array() = range().value

excel - vba搜索替换字符

arrays - 用于选择数组最小值的 VBA 代码

Java - 使用 POI 过滤 Excel 文件的行

Excel TRIM 函数错误

excel - 当选择改变时如何获取之前的选择?

regex - 如何为 GIIN 格式验证创建正则表达式 VBA 宏

python - 在Python中使用xlrd从Excel读取日期时,日期时间随机变成 float

excel - 根据单元格值隐藏行非常慢