我不知道哪一列会自动过滤?

我试图自动处理各种报告,我只需要筛选和计数的行。 我目前有一个PowerShell脚本来打开每个报告并运行一些macros。 这只是一个工作状态,但是现在我想让它变得更聪明一点,抓住一些失败的地方,所以我可能会问几个问题,但是我会坚持每一个问题。

这些报告具有相似但不相同的布局。 我正在寻找一个特定的列名称,然后自动筛选。 我有一个非常基本的macros观目前这样做,并工作(大部分时间),例如,有时我想要的列是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" 

希望能给你当前的照片。

我现在想改为,search我正在寻找的字段标题,然后过滤该列,所以如果将来的报告格式更改我的macros不会中断。 类似于:

 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说closuresfilter,但他们已经closures。 所以我有点卡住了。

这部分将总是失败:

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

因为匹配只适用于一行或一列。 所以你的代码实际上是返回错误2042,然后由CInt转换为2042。 我想你没有那么多的数据列,因此自动filter失败。 使用:

 ColNum = Application.Match("*header", Range("A1:Z1"), 0) If Not IsError(ColNum) Then ... End If 

这应该适合你。

 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