我试图自动处理各种报告,我只需要过滤和计算行数。我目前有一个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
但这会产生错误" Range类的AutoFilter方法失败",Googlefu说要关闭过滤器,但它们已经关闭了。所以我有点卡住了。
答案 0 :(得分:2)
此部分将始终失败:
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
答案 1 :(得分:1)
这应该适合你。
Sub Button1_Click()
Dim r As Range
Dim c As Integer
Set r = Range("A1:B1").Find(what:="*word*", lookat:=xlWhole)
c = r.Column
ActiveSheet.AutoFilterMode = 0
Columns(c).AutoFilter Field:=1, Criteria1:="*criteria1*"
End Sub